在矩阵中查找重复的行,并为重复的行加一列

时间:2019-11-20 02:25:47

标签: r dataframe matrix duplicates

我正在处理一个矩阵,其中前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]) 然后执行与count中的plyr类似的操作,即我只保留唯一的行,还要将第8列中的值相加。因此,在上面的示例中,我希望最终只有1行,其中前7个条目为(-1 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)

我希望得到一个像这样的矩阵: 所需输出的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:0)

一种解决方法是将矩阵转换为数据框,然后使用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))

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