R中数据帧中值的唯一和非唯一列表
假设我有两个数据帧: 数据帧1(我们称之为Data1): 数据1的代码: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您可以使用%表达式中的%来查找两个数据帧中
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"