我在一个文件夹中有多个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。如何处理此数据框?
这不是您首先应该使用 assign
的东西。在 R 中使用一堆不同的 data.frame 是一团糟,但使用 data.frame 列表要容易得多。尝试使用
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])
但同样,从长远来看,这可能不是一个明智的策略。