r在for循环中创建和寻址变量

时间:2014-12-09 19:10:28

标签: r csv for-loop

我在一个文件夹中有多个csv文件。我想将此文件夹中的每个csv文件加载到一个单独的数据框中。接下来,我想从这个数据框中提取某些元素到矩阵中,并计算所有这些矩阵的平均值。

setwd("D:\\data")
group_1<-list.files()
a<-length(group_1)

mferg_mean<-data.frame

for(i in 1:a)
{ 
assign(paste0("mferg_",i),read.csv(group_1[i],header=FALSE,sep=";",quote="",dec=",",col.names=1:90))
}

由于文件夹中有11个csv文件,我现在拥有数据框

mferg_1

mferg_11

如何在此循环中寻址每个数据框?如上所述,我想从每个数据框中提取某些元素到矩阵。我会想象它是这样的:

assign(paste0("mferg_matrix_",i),mferg_i[1:5,1:10])

但这显然不起作用,因为R不会在循环中识别mferg_i。我该如何处理这个数据框?

1 个答案:

答案 0 :(得分:2)

这不是你应该首先使用assign的东西。使用R中的一堆不同的data.frames是一团糟,但使用data.frames的 list 更容易。尝试使用

阅读数据
group_1<-list.files()
mferg <- lapply(group_1, function(filename) { 
    read.csv(filename,header=FALSE,sep=";",quote="",dec=",",col.names=1:90))
})

并使用mferg[[1]]mferg[[1]]等获取每个值。然后,您可以使用

创建提取列表
mferg_matrix <- lapply(mferg, function(x) x[1:5, 1:10])

这是更像R的做事方式。

但从技术上讲,您可以使用get来检索您使用assign创建值的值。例如

assign(paste0("mferg_matrix_",i),get(paste0("mferg_",i))[1:5,1:10])

但从长远来看,这可能不是一个明智的策略。