假设我有两个数据框:
数据框1(让我们称之为Data1):
V1 V2
1 "AB"
3 "XY"
5 "DH"
8 "ST"
7 "RE"
Data1的代码:
V1 <- c(1,3,5,8,7)
V2 <- c("AB","XY", "DH", "ST","RE")
Data1 <- data.frame(V1,V2)
数据框2(让我们称之为Data2):
V1 V2
1 "AB"
2 "ZZ"
3 "XY"
5 "DH"
8 "ST"
Data2的代码:
V1 <- c(1,2,3,5,8)
V2 <- c("AB","ZZ","XY","DH","ST")
Data2 <- data.frame(V1,V2)
如果您注意到,Data2的第二行(其中V2的值为“ZZ”)在Data1中不存在,Data1中的最后一行(其中V2的值为“RE”)在Data2中不存在。
A)我想列出所有数据框中都不存在的V2值。
对于这个例子,它将是“ZZ”和“RE”。
B)我想列出两个数据框中存在的所有V2值。
对于此示例,结果将为“AB”,“XY”,“DH”,“ST”。
答案 0 :(得分:2)
您正在寻找?setdiff
和?intersect
inters <- intersect(DF2$V2, DF1$V2)
[1] "AB" "XY" "DH" "ST"
setdf <- c(setdiff(DF2$V2, DF1$V2), setdiff(DF1$V2, DF2$V2))
[1] "ZZ" "RE"
答案 1 :(得分:1)
您可以使用%in%
表达式查找两个数据框中是否存在V2
的值。使用not表达式(!
)查找两个数据帧中不存在的表达式,然后将结果从这两个数据帧中绑定在一起。
> rbind(Data1[!Data1$V2 %in% Data2$V2,], Data2[!Data2$V2 %in% Data1$V2,])
V1 V2
5 7 RE
2 2 ZZ
> unique(rbind(Data1[Data1$V2 %in% Data2$V2,], Data2[Data2$V2 %in% Data1$V2,]))
V1 V2
1 1 AB
2 3 XY
3 5 DH
4 8 ST
在最后一篇文章中:如果每个V1,V2组合都相同,你可以简单地写
Data1[Data1$V2 %in% Data2$V2,]
并保存一些代码行。