【问题标题】:Comparing 3 column lists in R比较 R 中的 3 列列表
【发布时间】:2015-03-15 04:34:59
【问题描述】:

我正在寻找 R 中可以比较三列矩阵的循环。我想要循环做的是采用两个格式的矩阵/数据帧


 A:
 X    Y    Z
 3    4    5
 3    5    6
 4    5    7


B:
X    Y    Z
3    4    5
3    4    4
3    4    7
4    5    7

如果所有 3 列都完全匹配,则遍历每个返回行。

这会返回


X    Y    Z
3    4    5
4    5    7 

理想情况下,代码可以应用于更长的矩阵/数据帧。

【问题讨论】:

    标签: r list loops matrix dataframe


    【解决方案1】:

    如果您的数据很大,您可以使用data.table 包:

    library(data.table); setDT(A); setDT(B)
    
    setkey(B)[A,nomatch=0]
    #   X Y Z
    #1: 3 4 5
    #2: 4 5 7
    

    setkey(A)[B,nomatch=0] 返回相同的输出,因为它是一个交集。

    【讨论】:

      【解决方案2】:

      如果“A”、“B”是“data.frames”,您可以从dplyr 尝试intersect

      library(dplyr)
      intersect(A,B)
      

      或者

      inner_join(A,B)
      

      【讨论】:

        【解决方案3】:

        base R 中的一个选项是merge:

        merge(A,B, by = c("X", "Y", "Z"))
        #  X Y Z
        #1 3 4 5
        #2 4 5 7
        

        这种方法与矩阵和 data.frames 的工作方式相同。

        事实上,在这种情况下,您甚至可以省略“by”参数的说明:

        merge(A,B)
        #  X Y Z
        #1 3 4 5
        #2 4 5 7
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多