我已经看过其他几篇帖子了,他们建议将数据框加载到列表中,但是他们从来没有解释过什么是可接受的方式来动态命名生成的数据帧。
我已经提出了下面的代码,我想知道这是否是一种很好的方式,或者我将来是否会遇到问题?
谢谢,
#create the data frames from all csv files into a list
dfs <- lapply(list.files(pattern="*.csv"),read.csv)
#Give them the correct names
names(dfs) <- regmatches(list.files(pattern="*.csv"),regexpr("^[[:alpha:]]+", list.files(pattern="*.csv")))
另外,我可以命名并同时创建它们吗?我不想冒第二次调用时list.files以不同顺序返回的风险,并且我在数据帧上添加了错误的名称。
答案 0 :(得分:5)
Map
函数可以更好地自动命名元素。
dfs <- Map(read.csv, list.files(pattern="*.csv"))
然后,您可以在生成列表后进一步编辑列表的names()
。或者您可以保存文件名向量,而不是多次调用list.files()
并立即使用setNames
#create the data frames from all csv files into a list
csvfiles <- list.files(pattern="*.csv")
dfs <- setNames(lapply(csvfiles, read.csv),
regmatches(csvfiles,regexpr("^[[:alpha:]]+", csvfiles))
)