我有大量 csv 文件想要读入 R。csv 中的所有列标题都是相同的。起初我以为我需要根据文件名列表创建一个循环,但搜索后我发现了一种更快的方法。这会正确读取并组合所有 csv(据我所知)。
filenames <- list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)
library(plyr)
import.list <- llply(filenames, read.csv)
combined <- do.call("rbind", import.list)
唯一的问题是我想知道特定行数据来自哪个 csv。我想要一个标记为“源”的列,其中包含特定行来自的 csv 的名称。例如,如果当数据进入 R 时 csv 被称为 Chicago_IL.csv,则该行将如下所示:
> City State Market etc Source
> Burbank IL Western etc Chicago_IL
您已经完成了所有艰苦的工作。通过相当小的修改,这应该是简单的。
逻辑是:
- 创建一个小型辅助函数,用于读取单个 csv 并添加包含文件名的列。
- 在 llply() 中调用此辅助函数
以下应该有效:
read_csv_filename <- function(filename){
ret <- read.csv(filename)
ret$Source <- filename #EDIT
ret
}
import.list <- ldply(filenames, read_csv_filename)
请注意,我对您的代码提出了另一个小改进:read.csv() 返回一个 data.frame - 这意味着您可以使用 ldply() 而不是 llply()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)