标记与其他数据框的值匹配的值

时间:2016-11-25 08:41:21

标签: r dataframe merge

我有3个数据框。一个包含整个数字集。第二和第三数据帧包含具有特定特征(类型一或类型二)的这些数字的子集。我想要做的是将这些数据框合并为一个,以便检查每个数字是第一类还是第二类。

示例:

numbers <- c("+333","+334", "+335", "+443", "+444", "+445", "+553", "+554", "+555")
typeone <- c("+333","+334", "+335", "+443")
typetwo <- c("+335", "+443", "+444", "+445")
fs <- data.frame(numbers)        
to<- data.frame(typeone)
tt<- data.frame(typetwo)

合并fstott后的预期结果:

   numbers    typeone    typetwo
1   333         yes 
2   334         yes 
3   335         yes        yes
4   443         yes        yes
5   444                    yes
6   445                    yes
7   553     
8   554     
9   555     

2 个答案:

答案 0 :(得分:2)

试试这个:

    data.frame(numbers = numbers,
               typeone = numbers %in% typeone, 
               typetwo = numbers %in% typetwo)

然后您可以根据需要更改新的逻辑列。

答案 1 :(得分:2)

您可以尝试顺序合并。要获得开箱即用的漂亮列名,您可以将名称更改为names(to) <- c("numbers", "typeone"),并将tt更改为类似名称。

to$mhm <- "yes"
tt$mhm <- "yes"

out <- merge(fs, to, by.x = "numbers", by.y = "typeone", all.x = TRUE)
merge(out, tt, by.x = "numbers", by.y = "typetwo", all.x = TRUE)

  numbers mhm.x mhm.y
1    +333   yes  <NA>
2    +334   yes  <NA>
3    +335   yes   yes
4    +443   yes   yes
5    +444  <NA>   yes
6    +445  <NA>   yes
7    +553  <NA>  <NA>
8    +554  <NA>  <NA>
9    +555  <NA>  <NA>

或者将数据集放在list中,设置相同的列名,并将Reducemerge一起使用

Reduce(function(...) merge(..., by= "numbers", all.x=TRUE), 
         list(fs, setNames(to, "numbers"), setNames(tt, "numbers")))