r - 合并矩阵中具有相同列名的列

标签 r aggregate

我有一个矩阵,其中的列重复字符列名称。

set.seed(1)
m <- matrix(sample(1:10,12,replace=TRUE), nrow = 3, ncol = 4, byrow = TRUE,
       dimnames = list(c("s1", "s2", "s3"),c("x", "y","x","y")))

m
   x y  x  y
s1 3 4  6 10
s2 3 9 10  7
s3 7 1  3  2

我需要将具有相同列名的所有列汇总为一列,即
m <- matrix(c(9,14,13,16,10,3), nrow = 3, ncol = , byrow = TRUE,dimnames = list(c("s1", "s2", "s3"),c("x", "y")))

    x  y
s1  9 14
s2 13 16
s3 10  3

我玩过聚合函数中的简单总和,但没有任何运气。有什么建议吗?谢谢。

最佳答案

好吧,这个解决方案不会因为代码的透明度而赢得任何奖项,但我更喜欢它:

nms <- colnames(m)
m %*% sapply(unique(nms),"==", nms)
#     x  y
# s1  9 14
# s2 13 16
# s3 10  3

它通过构造一个矩阵来工作,该矩阵形成 m 列的适当线性组合。要查看它是如何工作的,请将第二行分成两个分量矩阵,使用 %*% 将它们相乘,如下所示:
 -          -      -   -
|  3 4  6 10 |    | 1 0 |
|  3 9 10  7 |    | 0 1 |
|  7 1  3  2 |    | 1 0 |
 -          -     | 0 1 |
                   -   -

关于r - 合并矩阵中具有相同列名的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512441/

相关文章:

r - 循环数据优化算法

Python如何将数据分组为合并数据框?

r - 在R中分组后选择聚合列的第n个值

c# - Linq 在单次迭代中选择和聚合

r - 为 facet_wrap (ggplot2) 中的每个图指定不同的 xlim

R cumunique 喜欢 cumsum

r - 从 R 中的表中提取元素

python - Pandas agg 根据数据类型定义指标

php - 查找给定位置的记录总数

r - 我必须将收集与磁盘框架一起使用吗?