我有一个包含两列分隔字符串的数据框:
df
a b
1 a, b, c, d a, d
2 a, c a
3 b, d a, d
我想创建第三列以包含与前两列相交的字符串,例如:
a b c
1 a, b, c, d a, d a, d
2 a, c a a
3 b, d a, d d
我已经尝试了许多方法,涉及将字符串转换为列表并返回,但我似乎无法正确完成 .
使用 dplyr 我首先尝试使用:
df %
mutate(c=paste(c(intersect(unlist(strsplit(a, split=", ")), unlist(strsplit(b, split=", "))))))
这导致了一个错误:
eval中的错误(替换(expr),envir,enclos):错误的结果大小(2),预期3或1
除了不返回所需的字符串之外,这似乎也会返回每行相同大小的结果(通过将上面的 mutate 函数从 paste 更改为 length 来验证):
df %>%
mutate(c=length(c(intersect(unlist(strsplit(a, split=", ")), unlist(strsplit(b, split=", "))))))
a b c
1 a, b, c, d a, d 2
2 a, c a 2
3 b, d a, d 2
这使我担心我的所有行结果都被合并到一个结果中并重复 .
为了简化我试图在使用intersect函数之前将字符串转换为列表的事情:
df %>% mutate(a_list=list(unlist(strsplit(a, split=", "))))
但收到错误:
eval中的错误(替换(expr),envir,enclos):与STRSXP不兼容
这让人怀疑数据帧中的列表是否与 tidyverse 兼容,因此,如果我需要采用完全不同的方法 .
关于如何解决在R中的两个数据帧列之间共享的字符串问题的任何建议(以及如何处理数据帧中的列表类似值的任何见解)将不胜感激地收到 .