【发布时间】:2017-02-17 16:00:12
【问题描述】:
我有一个包含两列分隔字符串的数据框:
df <- data.frame('a'=c('a, b, c, d', 'a, c', 'b, d'), 'b'=c('a, d', 'a', 'a, d'))
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 <- df %>%
mutate(c=paste(c(intersect(unlist(strsplit(a, split=", ")), unlist(strsplit(b, split=", "))))))
导致错误:
eval(substitute(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(substitute(expr), envir, enclos) 中的错误: 与STRSXP不兼容
这让人怀疑数据框中的列表是否与tidyverse 兼容,因此,我是否需要采取完全不同的方法。
任何关于如何解决在 R 中的两个数据框列之间查找共享字符串的问题的建议(以及任何关于如何处理数据框中类似列表的值的见解)都将不胜感激。
【问题讨论】:
标签: r list dataframe dplyr intersection