根据现有列中的值向矩阵添加多个列

时间:2013-03-26 16:12:50

标签: r

我正在寻找一种方法,根据现有列中的值,将3个不同列中的3个值添加到矩阵中。

experiment = rbind(1,1,1,2,2,2,3,3,3)
newColumns = matrix(NA,dim(experiment)[1],3) # make 3 columns of length experiment filled with NA
experiment = cbind(experiment,newColumns) # add new columns to the experimental data
experiment = data.frame(experiment)    
experiment[experiment[,1]==1,2:4] = cbind(0,1,2) # add 3 columns at once
experiment$new[experiment[,1]==2] = 5 # add a single column
print(experiment)

  X1 X2 X3 X4 new
1  1  0  0  0  NA
2  1  1  1  1  NA
3  1  2  2  2  NA
4  2 NA NA NA   5
5  2 NA NA NA   5
6  2 NA NA NA   5
7  3 NA NA NA  NA
8  3 NA NA NA  NA
9  3 NA NA NA  NA
但是,这会以错误的方式填充新列。我希望第2列全为0,第3列为全1,第4列为全3。

我知道我一次可以做1列,但是我真正的数据集退出很大,所以这不是我的首选解决方案。我希望能够通过使列的范围更大并在示例中为3个值添加值来轻松添加更多列

1 个答案:

答案 0 :(得分:1)

而不是:

experiment[experiment[,1]==1,2:4] = cbind(0,1,2) # add 3 columns at once

试试这个:

experiment[experiment[,1] == 1, 2:4] <- rep(c(0:2), each=3)

问题是你提供了3个值(0,1,2)来填充9个条目。默认情况下,这些值填充列式。因此,第一列填充0,1,2,然后值被回收。所以,再次出现0,1,2和0,1,2。由于您需要0,0,0,1,1,1,2,2,2,因此您应该使用rep(0:2, each=3)明确生成(each执行生成上面显示的数据的任务。)