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

时间:2016-04-20 06:39:43

标签: r compare dplyr

我有一个包含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

我真的不知道如何比较这个,因为两者都是不同的类型,一旦我比较以及如何分离上面的值。

1 个答案:

答案 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 
}))