我有一个包含600行的数据框,其中包含一个字符变量(ids),其中包含用逗号分隔的数字。
name ids
x 8,5,23,56,78,44,54
y 5,7,23,44
z 8,44,2
我想将上述值与包含数值的三个不同向量进行比较。
a=c(5,7,9,3)
b=c(8,23,78,66,4)
c=c(44,54,2,90)
我需要为数据框中的向量创建三个新列,其中包含来自每个向量中多次匹配的ID的值
name ids a b c
x 8,5,23,56,78,44,54 NA 8,23,78 44,54
y 5,7,23,44 5,7 NA NA
z 8,44,2 NA NA 44,2
我真的不知道如何比较这个,因为两者都是不同的类型,一旦我比较以及如何分离上面的值。
答案 0 :(得分:1)
我们可以将矢量放在list
中,循环显示它们,split
'data.frame'中的'ids'列',','到'list
子集基于找到%in%
拆分list
的元素的向量,当子集的length
为1或else
我们paste
时创建一个返回NA的例外(即toString
)将它们放在一起并将输出分配回'df1'中的新列。
df1[letters[1:3]] <- lapply(list(a, b, c), function(x)
sapply(strsplit(df1$ids, ","), function(y) {
x1 <- x[x %in% as.numeric(y) ]
if(length(x1)>1) toString(x1) else NA
}))