r-将数据帧与向量进行比较,并为匹配的值创建新的变量



我有一个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 
}))

相关内容

  • 没有找到相关文章

最新更新