我正在寻找一种方法,根据现有列中的值,将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个值添加值来轻松添加更多列
答案 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
执行生成上面显示的数据的任务。)