我正在尝试这样的循环,我想动态地分配矩阵列的名称:
for(i in 1:nclass){
P <- eXb / SeXb[mydata$chid]
mydata <- cbind(mydata, paste("l_", i, sep="")=P)
}
Run Code Online (Sandbox Code Playgroud)
任何想法(除了事后更改colnames)?
谢谢
Rom*_*rik 16
那这个呢?完成完整的矩阵后,您可以设置列名称.
> a <- matrix(1:9, 3)
> a
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> colnames(a) <- paste("col", 1:3, sep = "")
> a
col1 col2 col3
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Run Code Online (Sandbox Code Playgroud)
如果您遇到不知道添加列的编号的问题,可以通过以下方式添加和命名:
df <- data.frame(matrix(1:9, 3, 3))
df
#> X1 X2 X3
#>1 1 4 7
#>2 2 5 8
#>3 3 6 9
for(i in 1:5){
df[, ncol(df) + 1] <- rnorm(nrow(df))
names(df)[ncol(df)] <- paste0("mean_", i)
}
df
#> X1 X2 X3 mean_1 mean_2 mean_3 mean_4 mean_5
#>1 1 4 7 -1.9983501 -1.6810377 1.2893602 0.5342042 -0.8354363
#>2 2 5 8 0.5966507 -0.5628999 1.2953387 -0.6661931 -0.4685747
#>3 3 6 9 -0.4268952 -2.0069306 0.6390317 -0.3505088 0.1230753
Run Code Online (Sandbox Code Playgroud)
如果您尚未使用cbind,也可以这样做:
for(i in 1:nclass){
P <- eXb / SeXb[mydata$chid]
mydata[,paste0("l_",i)] <- P
}
Run Code Online (Sandbox Code Playgroud)
Paste0只是贴上sep = ""它真的很方便。幸运的是,paste并且paste0可以使用而无需cbind创建新列如上所示。