如何在r中使用循环方法重命名不同矩阵中的列?

时间:2016-01-09 22:13:58

标签: r loops matrix rename variable-assignment

我试图用循环重命名许多矩阵中的列(矩阵的名称是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中的循环方法重命名不同矩阵中的列?

1 个答案:

答案 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