我有一个600行的数据帧,其中有一个字符变量(id),包含用逗号分隔的数字。
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
我真的不知道如何进行比较,因为两者都是不同的类型,一旦我进行比较,如何获得如上所述的分离值。
我们可以将向量放在list
中,循环遍历它们,split
是'data.frame'by'中的'ids'列,'到list
中,根据找到的元素对向量进行子集划分%in%
是拆分的list
,当子集的length
是1或else
时创建一个异常以返回NA,我们将paste
(即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
}))