0

我正在寻找一种基于现有列中的值将 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 个值来轻松添加更多列

4

1 回答 1

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,你应该显式地生成 using rep(0:2, each=3)each生成上面显示的数据的任务)。

于 2013-03-26T16:22:12.377 回答