我一直在尝试使用相同的变量对不同的数据集执行相同的操作。我需要能够读取多个csv文件并将它们放在具有相似名称的数据框中(例如:data1,data2等),这样我就可以对它们执行相同的任务。目前我正在重写代码集5次,但如果有办法命名并循环其名称并执行这些任务,那就太好了。问题是每次执行代码时文件总数不会保持不变。
这是我到目前为止所尝试的内容,这可能会让我知道我需要做什么。
filenames <- dir(path="C/.../Files")
for(i in filenames){
ori_data[i] <- read.table(i, header = T, sep = ",", stringsAsFactors=F)
}
当然这会引发错误,因为R无法识别ori_data [i]。 我的文件夹'文件'仅包含需要分析的csv文件。文件数可以是1到20之间的任何位置。我不知道如何命名这些数据帧。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您可以将文件读入列表。将工作目录设置为包含感兴趣文件的文件夹,然后执行以下操作:
ori_data <- lapply(dir(), read.csv, header = T, sep = ",", stringsAsFactors = F)
如果您想查看ith
数据框,可以输入ori_data[i]
来完成此操作。
您还可以将列表组件命名为:
names(ori_data) <- dir()
为了解决您所遇到的错误,您还没有为ori_data
分配空间,我会假设。例如,假设file.txt是由ori_data[i]
命名的文件之一,ori_data["file.txt"]
最终可能会像dir()
一样。如果您尚未将ori_data
初始化为数据框或列表,那么R将无法执行任何操作。
答案 1 :(得分:0)
尝试使用assign
。这样的事情对你有用:
filenames <- dir(path="C/.../Files")
for(i in filenames){
assign(paste0('ori_data_',i),read.table(i, header = T, sep = ",",stringsAsFactors=F))
}
答案 2 :(得分:0)
这是我的方法,但我不能保证它运作良好。试一试,让我们知道。方法是创建一个空数据框,然后创建一个循环来吃掉目录中的所有cvs,并在文件中存储名称(带有选项full.names = TRUE
)。
data <- data.frame()
filesf <- list.files("your_directory", full.names=TRUE)
for (i in filesf) {
data <- rbind(data, read.csv(filesf[i]))
}
之后,您应该拥有一个名为data
的唯一文件。然后,您可以使用split
函数dplyr
将group_by
文件拆分。