我正在比较两列,但我确实想仅提取在以前的列值上添加的字符。我只想比较差异并将提取的字符提取到行上的先前值。查看此表,看看diff列上的预期输出应该是什么样子。
dput(df)
structure(list(v1 = c("John|Alice,Mark|mercy, Austin|Silva", "Eunice|stoney, Brandon|Mary", "Apple| -Mango"),
v2 = c("John|Alice,Mark|mercy, Austin|Silva|James |Jacy", "NA ", "Apple| +Mango | Orange"),
diff = c("|James |Jacy","NA", "+ |Orange")),
class = "data.frame", row.names = c(NA, -3L))
我已经尝试过这段代码,但是它给了我column1和column2的全部值,但是我希望它可以将新添加的字符赋予上一个字符
library(dplyr); library(stringr)
dff <- df %>% mutate(diff = str_remove(v1,v2))
答案 0 :(得分:1)
您只需要指定正确的分隔符即可
Map(function(x, y) paste(setdiff(y, x), collapse = '| '), strsplit(df$v1, '\\||, | | -| \\+'), strsplit(df$v2, '\\||, | | -| \\+'))
#[[1]]
#[1] "James| | Jacy"
#[[2]]
#[1] "NA"
#[[3]]
#[1] "Orange"
要分配回数据帧,最好使用mapply
并简单地分配,即
df$diff1 <- mapply(function(x, y) paste(setdiff(y, x), collapse = '| '), strsplit(df$v1, '\\||, | | -| \\+'), strsplit(df$v2, '\\||, | | -| \\+'))