【问题标题】:Unique and non-unique lists of values in a data frame in RR中数据框中的唯一和非唯一值列表
【发布时间】:2013-07-12 21:54:41
【问题描述】:

假设我有两个数据框:

数据框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)

如果您注意到,Data1 中不存在 Data2 的第二行(其中 V2 的值为“ZZ”),并且 Data1 中的最后一行(其中 V2 的值为“RE”)不存在于 Data2 中。

A)我想列出两个数据框中都不存在的所有 V2 值。
对于这个例子,它是“ZZ”和“重新”。

B) 我想列出两个数据帧中都存在的所有 V2 值。
对于本示例,结果将是“AB”、“ XY”、“DH”、“ST”。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您正在寻找?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"
    

    【讨论】:

      【解决方案2】:

      您可以使用%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,]
      

      并为自己节省几行代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        相关资源
        最近更新 更多