假设我们在目录C:\ R \ Data中有文件file1.csv,file2.csv,...和file100.csv,我们希望将它们全部读入单独的数据框(例如file1,file2,...和file100) .
这样做的原因是,尽管具有相似的名称,但它们具有不同的文件结构,因此将它们放在列表中并不是很有用 .
我可以使用 lapply
但返回包含100个数据帧的单个列表 . 相反,我想在全球环境中使用这些数据框 .
如何直接将多个文件读入全局环境?或者,或者,如何将数据框列表的内容解压缩到其中?
9 回答
快速草案,未经测试:
使用
list.files()
akadir()
动态生成文件列表 .这将返回一个向量,只是在
for
循环中沿向量运行 .读取第i个文件,然后使用
assign()
将内容放入新变量file_i这应该为你做的伎俩 .
谢谢大家的回复 .
为了完整性,这里是我加载任意数量(制表符)分隔文件的最终答案,在这种情况下有6列数据,其中第1列是字符,2是因子,余数是数字:
将
assign
与包含所需数据框名称的字符变量一起使用 .别 . 将它们保存为列表 . 这是要走的路 .
这个答案是对哈德利答案的一个更有用的补充 .
尽管OP特别希望将每个文件作为一个单独的对象读入其R工作区,但许多其他人天真地登陆这个问题可能会认为最好将文件读入单个数据框列表中 .
所以对于记录,这里是你如何做到这一点 .
现在
my_files[["filename"]]
可以引用任何文件,这在工作区中只有单独的filename
变量并不是更糟糕,而且通常更方便 .这是一种使用lapply解压缩data.frames列表的方法
从全局环境访问列表元素的一种简单方法是
attach
列表 . 请注意,这实际上会在搜索路径上创建一个新环境,并将列表中的元素复制到其中,因此您可能希望在附加后删除原始列表,以防止两个可能不同的副本浮动 .从文件夹中读取所有CSV文件并创建与文件名相同的vactors: