我有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)
合并fs
,to
和tt
后的预期结果:
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
答案 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
中,设置相同的列名,并将Reduce
与merge
一起使用
Reduce(function(...) merge(..., by= "numbers", all.x=TRUE),
list(fs, setNames(to, "numbers"), setNames(tt, "numbers")))