比较两个列的值并将提取的字符提取到新的diff列

时间:2019-07-24 14:07:13

标签: r dataframe

我正在比较两列,但我确实想仅提取在以前的列值上添加的字符。我只想比较差异并将提取的字符提取到行上的先前值。查看此表,看看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))

1 个答案:

答案 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, '\\||, | | -| \\+'))