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

同じ列名を持つすべての列を1つの列に合計する必要があります。

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

集計関数で単純な合計を試してみましたが、うまくいきませんでした。何かアドバイス?ありがとう。

4

2 に答える 2

8

まあ、このソリューションはコードの透明性で賞を受賞することはありませんが、私はむしろ気に入っています。

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

の列の適切な線形結合を形成する行列を構築することによって機能しmます。それがどのように機能するかを確認するには、次の%*%ように を使用して乗算される 2 つのコンポーネント マトリックスに 2 番目の行を取り出します。

 -          -      -   -
|  3 4  6 10 |    | 1 0 |
|  3 9 10  7 |    | 0 1 |
|  7 1  3  2 |    | 1 0 |
 -          -     | 0 1 |
                   -   -
于 2012-07-16T21:26:30.303 に答える
6
nms <- colnames(m)
sapply(unique(nms), function(i)rowSums(m[, nms==i]))

   x  y
s1  9 14
s2 13 16
s3 10  3
于 2012-07-16T21:24:43.580 に答える