我正在处理一个矩阵,其中前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)
我希望得到一个像这样的矩阵: 所需输出的屏幕截图
答案 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))
如果需要,可以将数据帧再次转换为矩阵。