2012-07-16 98 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

相關問題