【发布时间】:2020-03-22 18:41:56
【问题描述】:
我有 20 个 csv 文件需要上传 我做了一个循环,然后将每个 data.frame 添加到一个向量中。 最后,在向量“list_df”中,我有 20 个元素,我在其中存储了 20 个数据帧的名称。
现在我正在尝试获取存储在 list_df 中的那些日期帧,但它不起作用。 任何想法如何获取存储在向量中的那些数据帧以进行进一步计算?
list_df[1][column_name]
或
list_df[1]$column_name
没用
path<-'thats my path'
list_of_files<-list.files(path)
list_df<-c() #creating empty vector
for (i in 1:length(list_of_files)){
assign(paste("dffile",list_of_files[i],sep=""),(read.table(paste(path,list_of_files[i],sep=""), sep=",", header=TRUE)))
list_df[i]<-paste("dffile",list_of_files[i],sep="")
}
【问题讨论】:
-
Gawel,你正在走一些非常糟糕的(在 R 中)做法:(1)使用
assign; (2) 生长对象(R Inferno 第 2 章)。这里有可能真正混淆变量和变量名称,但我不确定,因为我们不知道这些东西是什么样的。我建议你阅读 R Inferno 第 2 章,以及关于处理 lists of frames 而不是创建大量(相似)对象的assign方法的答案。 -
顺便说一句:您不是在列表中存储框架,而是存储由
paste返回的字符串(或字符串向量)。如果您使用str(list_df),我怀疑您会看到"dffilesomefile.csv"(以及更多)。也许用list_df <- lapply(list_of_files, read.table, sep = ",", header = TRUE)替换你所有的for循环。 -
你是对的@r2evans。我有字符串列表。我的问题是如何转换那些包含数据框名称的字符串值。
-
我会重申,应该不鼓励使用
assign和get。如果您的文件的结构都大致相同,那么将它们保存在一个列表中会有所帮助:当您对其中一个文件执行操作时,使用lapply您可以轻松地对所有文件执行相同的操作(没有for循环必需的)。同样,使用assign和get可能难以重现。但如果你仍然坚持使用assign,请查看get和mget。 -
感谢 r2evans。我在 lapply 中使用了你的方法,它看起来确实更好。非常感谢。
标签: r dataframe vector read.table