我认为我的图像可能会传达 90% 的问题。我的尝试是我在下面发布的内容:(当 ColB 包含“Sep”时,仅将最后一次出现的/分开)
df <- structure(list(ColA = c("abc/def", "bcd/efg", "def/ghj/yes",
"fet/hjk/yes"), ColB = c("sep", "no", "sep", "no")), class = "data.frame", row.names = c(NA,
-4L))
library(tidyverse)
df %>%
mutate(across(str_detect(ColB,"sep")~separate(ColA,into=c("A1","A2"),sep="/",
TRUE ~ NA))
最佳答案
使用 extract
我们可以将数据分成不同的列,如果 colB != 'sep
则将值转换为 NA
。
library(dplyr)
library(tidyr)
df %>%
extract(ColA, c('A1', 'A2'), '(.*)/(.*)', remove = FALSE) %>%
mutate(across(A1:A2, ~replace(., ColB != 'sep', NA)))
# ColA A1 A2 ColB
#1 abc/def abc def sep
#2 bcd/efg <NA> <NA> no
#3 def/ghj/yes def/ghj yes sep
#4 fet/hjk/yes <NA> <NA> no
关于r - R中数据框中条件的单独列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67759480/