1

次のような6列のマトリックスがあります。

c_1 C_2 A_1 A_2 D_1 D_2 ..
 2  3  3  3  3  3  3
 4  4  4  4  2  2  2

同じプレフィックスを持つこの 3 つのマトリックスを分割したい:

c_1 c_2
2  3
4  4

A_1 A_2
3 3
4 4 
4

3 に答える 3

5

cマトリックスで大文字と小文字が混在していると仮定すると、次のようなものが機能するはずです。

m <- matrix(1:12,2,6)
colnames(m) <- paste(rep(letters[1:3],each = 2),1:2,sep = '_')
out <- split.data.frame(t(m),f = substr(rownames(t(m)),1,1))
out <- lapply(out,t)
> out
$a
     a_1 a_2
[1,]   1   3
[2,]   2   4

$b
     b_1 b_2
[1,]   5   7
[2,]   6   8

$c
     c_1 c_2
[1,]   9  11
[2,]  10  12
于 2013-07-24T14:29:46.993 に答える
1

正確に何をしたいかによって少し異なります。以下にいくつかの例を示します。

mat <- structure(c(3L, 4L, 3L, 4L, 3L, 4L, 3L, 2L, 3L, 2L, 3L, 2L), 
                 .Dim = c(2L,6L), 
                 .Dimnames = list(c("2", "4"), c("c_1", "c_2", "A_1", "A_2","D_1", "D_2")))

一部の行を手動で抽出したいだけの場合は、次を使用できます

mat[,1:2]
mat[,3:4]
mat[,5:6]

列名の最初の文字に応じてこれを行いたい場合は、必要な列名を手動で選択できます。

mat[,substr(colnames(mat), 1, 1)=="A"]

または、可能なすべての列名のリストを取得できます

lst <- lapply(unique(substr(colnames(mat),1,1)), 
          function(x) mat[,substr(colnames(mat), 1, 1)==x])
names(lst) <- unique(substr(colnames(mat),1,1))
lst
于 2013-07-24T14:30:45.487 に答える