2012-07-16 178 views
4

我有一个矩阵,其中包含重复字符列名称的列。在具有相同列名称的矩阵中组合列

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 

我曾与在聚合函数的简单相加戏,但还没有任何运气。有什么建议?谢谢。

+1

建议#1:提供最小[再现的示例](HTTP://计算器.COM /问题/ 5963269 /如何对做 - 一个伟大-R重现-例子)。 – 2012-07-16 20:59:51

+0

我可以用任何方式解释你的问题。这使得它无法理解。请发布样本数据和预期结果。 – Andrie 2012-07-16 21:02:17

+0

好吧,现在我有你的示例数据。这是一个好的开始。预期的结果是什么? – Andrie 2012-07-16 21:07:39

回答

8

那么,这个解决方案将不会赢得的代码透明度任何奖项,但我比较喜欢它:

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 | 
        - - 
+0

+1因为毕竟我的工作是弄清楚OP的想法,你还是设法偷了它:-)另外,我不知道你做了什么! – Andrie 2012-07-16 21:40:48

+0

谢谢。它的工作原理非常完美,但我不完全明白为什么目前会将其与时间区分开来。 – Elizabeth 2012-07-16 21:41:01

+0

@伊丽莎白 - 我只是加了一点解释。在那短小的一行代码中有一堆R技巧;它可能并不明确,但(出于同样的原因)它可能会奖励你给予它的任何注意。 – 2012-07-16 21:53:58

6
nms <- colnames(m) 
sapply(unique(nms), function(i)rowSums(m[, nms==i])) 

    x y 
s1 9 14 
s2 13 16 
s3 10 3 
+0

谢谢你帮我澄清这个问题,也为你的答案! – Elizabeth 2012-07-16 21:42:17

+1

+1我觉得自己像一个小偷,如果我没有背过某种像对待机器人一样对待我的防火墙,就不会让我发表任何评论,所以我会觉得自己像个小偷。仍然感到震惊的是,我用我奇怪的小代码行得到了接受! – 2012-07-16 21:57:49

+4

@ JoshO'Brien恐怕你没有通过图灵测试。只有一个机器人会想出这样一个模糊的答案,然后弥补这样一个不太可能的借口。 – Andrie 2012-07-16 22:03:35

相关问题