我试图用循环重命名许多矩阵中的列(矩阵的名称是mydata1,mydata2,mydata3等),因为我有超过500个矩阵。
每个矩阵都有两列:Date和Close我想将关闭列重命名为例如在mydata1中应该是Close1,在mydata2中应该是Close2等。
我试过这个(为了简化问题,我尝试只为前五种情况编写代码):
for( i in 1:5){
colnames(eval(as.symbol(paste("mydata",i,sep=""))))[2] = paste0("Close", i,sep="")
}
但它不起作用。不幸的是这次尝试
for( i in 1:5){
assign(paste("Close", i,sep=""), colnames(eval(as.symbol(paste("mydata",i,sep=""))))[2])
}
也没用。所以我的问题是:如何用r中的循环方法重命名不同矩阵中的列?
答案 0 :(得分:0)
您可以执行以下操作
首先创建数据
mat1 <- matrix(rnorm(12), ncol = 2)
colnames(mat1) <- c('Date', 'Close')
mat2 <- mat1 * 10
matlist <- list(mat1, mat2)
matlist
#[[1]]
# Date Close
#[1,] 1.45771420 0.1559991
#[2,] 0.87375548 1.3003942
#[3,] -0.95295604 -1.1558864
#[4,] -0.03167548 0.2160419
#[5,] 0.11407587 0.8044782
#[6,] -1.05365988 -0.7321157
#
#[[2]]
# Date Close
#[1,] 14.5771420 1.559991
#[2,] 8.7375548 13.003942
#[3,] -9.5295604 -11.558864
#[4,] -0.3167548 2.160419
#[5,] 1.1407587 8.044782
#[6,] -10.5365988 -7.321157
使用lapply
重命名第二列
new_matlist <- lapply(1:length(matlist), function(x) { colnames(matlist[[x]]) = c('Date',paste('Close', x, sep = '')); matlist[[x]]; } )
new_matlist
#[[1]]
# Date Close1
#[1,] 1.45771420 0.1559991
#[2,] 0.87375548 1.3003942
#[3,] -0.95295604 -1.1558864
#[4,] -0.03167548 0.2160419
#[5,] 0.11407587 0.8044782
#[6,] -1.05365988 -0.7321157
#
#[[2]]
# Date Close2
#[1,] 14.5771420 1.559991
#[2,] 8.7375548 13.003942
#[3,] -9.5295604 -11.558864
#[4,] -0.3167548 2.160419
#[5,] 1.1407587 8.044782
#[6,] -10.5365988 -7.321157