我需要你的帮助!我有一个像这样的矩阵
A B C
[1,] 101 201 301
[2,] 102 202 302
[3,] 103 203 303
[4,] 104 204 304
[5,] 105 205 305
[6,] 106 206 306
[7,] 107 207 307
[8,] 108 208 308
[9,] 109 209 309
[10,] 110 210 310
和一个具有不同值的向量,如下所示: 类别< -c(" A"," B"," A"," C"," A" " C"" B&#34)
在结果中我想在R中创建以下矩阵:
A B A C A C B
1 101 201 101 301 101 301 201
2 102 202 102 302 102 302 202
3 103 203 103 303 103 303 203
4 104 204 104 304 104 304 204
5 105 205 105 305 105 305 205
6 106 206 106 306 106 306 206
7 107 207 107 307 107 307 207
8 108 208 108 308 108 308 208
9 109 209 109 309 109 309 209
10 110 210 110 310 110 310 210
不幸的是,我只是R的初学者,所以我开发了以下程序:
#Create Example Data
A <- seq(101,110,1)
B <- seq(201,210,1)
C <- seq(301,310,1)
rawdata.m <- matrix(nrow=10,ncol=3,data=c(A,B,C))
colnames(rawdata.m) <- c("A","B","C")
categories <- c("A","B","A","C","A","C","B")
#build new matrix dependent on vector
if (categories[1]=="A") result.m <- data.frame(rawdata.m[,1])
if (categories[1]=="B") result.m <- data.frame(rawdata.m[,2])
if (categories[1]=="C") result.m <- data.frame(rawdata.m[,3])
for(i in 2:length(categories))
{
if (categories[i]=="A") result.m <- data.frame(result.m, rawdata.m[,1])
if (categories[i]=="B") result.m <- data.frame(result.m, rawdata.m[,2])
if (categories[i]=="C") result.m <- data.frame(result.m, rawdata.m[,3])
}
colnames(result.m) <- categories
print(result.m)
如果您使用更大的矩阵,此过程看起来不是很优雅,也不会很快。你知道更好的手术吗?
谢谢!
答案 0 :(得分:4)
这比你想象的容易得多:
rawdata.m[, categories]