根据向量中的不同条件构建矩阵

时间:2014-11-23 17:17:06

标签: r matrix

我需要你的帮助!我有一个像这样的矩阵

       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)

如果您使用更大的矩阵,此过程看起来不是很优雅,也不会很快。你知道更好的手术吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

这比你想象的容易得多:

rawdata.m[, categories]