R中数据帧中值的唯一和非唯一列表

R中数据帧中值的唯一和非唯一列表,r,dataframe,R,Dataframe,假设我有两个数据帧: 数据帧1(我们称之为Data1): 数据1的代码: V1 <- c(1,3,5,8,7) V2 <- c("AB","XY", "DH", "ST","RE") Data1 <- data.frame(V1,V2) 数据2的代码: V1 <- c(1,2,3,5,8) V2 <- c("AB","ZZ","XY","DH","ST") Data2 <- data.frame(V1,V2) V1您可以使用%表达式中的%来查找两个数据帧中

假设我有两个数据帧:

数据帧1(我们称之为Data1):

数据1的代码:

V1 <- c(1,3,5,8,7)
V2 <- c("AB","XY", "DH", "ST","RE")
Data1 <- data.frame(V1,V2)
数据2的代码:

V1 <- c(1,2,3,5,8)
V2 <- c("AB","ZZ","XY","DH","ST")
Data2 <- data.frame(V1,V2)

V1您可以使用%
表达式中的
%来查找两个数据帧中是否存在
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,]

并为自己保存一些代码行。

您正在查找
?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"
inters
Data1[Data1$V2 %in% Data2$V2,]
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"