[英]Combine columns in matrix having same column name
我有一个矩阵与列重复字符列名称。
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 |
- -
nms <- colnames(m)
sapply(unique(nms), function(i)rowSums(m[, nms==i]))
x y
s1 9 14
s2 13 16
s3 10 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.