【问题标题】:Find duplicate rows in a matrix and add up one column for the duplicate rows查找矩阵中的重复行并为重复行加一列
【发布时间】:2019-11-20 02:25:47
【问题描述】:

我正在研究一个矩阵,其中前 7 列仅由 +1/-1 组成,第 8 列由正十进制数组成。我想找到重复的行(例如说矩阵中有两行,这样 [-1 1 1 -1 -1 -1 1 0.32] ...(其他不同的行) [-1 1 1 -1 -1 -1 1 0.1] ...(其他不同的行) [-1 1 1 -1 -1 -1 1 0.005]) 然后在plyr 中执行类似于count 的操作,因为我只保留唯一的行,但也将第8 列中的值相加。所以在上面的例子中,我希望最终只有 1 行,其中前 7 个条目是 (-1 1 1 -1 -1 -1 1),而我的第 8 个条目是 0.425。

我不知道 R 中有这样的功能,我对 plyr / dplyr 了解不多。我想知道除了我手动编写一个循环来迭代 7 元素向量中 +1/-1 的所有可能 (128) 组合之外是否还有一个优雅的解决方案。

按照建议,我在下面添加了一个可重现的示例。为简单起见,尺寸发生了变化。

dat = matrix(c(-1, -1, 1, 0.1, -1, -1, 1, 0.2, -1, -1, -1, 0.05, 1, 1, 1, 0.5, -1, -1, -1, .9999), nrow = 5, byrow = T)

我希望得到一个如下所示的矩阵: 所需输出的屏幕截图

【问题讨论】:

    标签: r dataframe matrix duplicates


    【解决方案1】:

    解决此问题的一种方法是将矩阵转换为数据框,然后使用aggregate

    temp <- data.frame(dat)
    aggregate(temp$X4, temp[1:3], sum)
    
    #  X1 X2 X3    x
    #1 -1 -1 -1 1.05
    #2 -1 -1  1 0.30
    #3  1  1  1 0.50
    

    dplyr中,我们可以使用group_by_at,它可以接受列位置

    library(dplyr)
    data.frame(dat) %>% group_by_at(1:3) %>% summarise(sum = sum(X4))
    

    如果需要,数据框可以再次转换为矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2016-05-02
      • 2014-04-21
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2018-09-20
      相关资源
      最近更新 更多