从 R 中的子目录中读取同名的 csv 文件
read in csv-files with the same name from subdirectories in R
我有 2 个文件夹,分别名为 facebookdata1 和 facebookdata2。这些文件夹包含 CSV 文件,它们具有完全相同的名称("activities"、"user" 等等)并且它们计数相同。
我必须读入 2 个不同文件夹中的同名 csv 文件并将其合并 (rbind...) 到 R 中。
我知道我可以使用这个从一个文件夹中读取所有 csv 文件:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))
你只是缺少一个rbind!我通过删除“.csv”整理了您的变量名。
files1 <- list.files(path = "facebookdata1/", pattern="\.csv$")
files2 <- list.files(path = "facebookdata2/", pattern="\.csv$")
if(length(setdiff(files1, files2))>0)
stop("Actually, the two directories do not have the same files")
for (file in files1) {
varname <- substr(file, start=1, stop=nchar(file)-4)
data1 <- read.csv(file.path("facebookdata1", file))
data1 <- read.csv(file.path("facebookdata2", file))
assign(varname, rbind(data1, data2))
}
以下内容应该可以完成这项工作:
directories <- c("path/to/facebookdata1", "path/to/facebookdata2")
files <- lapply(directories, list.files, pattern="*.csv", full.names = TRUE)
files <- lapply(files, sort)
dat <- Map(function(x,y) { rbind(read.csv(x), read.csv(y)) },
files[[1]], files[[2]])
现在它们是dat的列表元素。
如果你想将它们分配给 globalenv 使用
list2env(dat)
您可以使用 data.table
来加快进程,如下所示:
require(data.table)
dat <- Map(function(x,y) { rbindlist(fread(x), fread(y)) },
files[[1]], files[[2]])
我有 2 个文件夹,分别名为 facebookdata1 和 facebookdata2。这些文件夹包含 CSV 文件,它们具有完全相同的名称("activities"、"user" 等等)并且它们计数相同。
我必须读入 2 个不同文件夹中的同名 csv 文件并将其合并 (rbind...) 到 R 中。
我知道我可以使用这个从一个文件夹中读取所有 csv 文件:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))
你只是缺少一个rbind!我通过删除“.csv”整理了您的变量名。
files1 <- list.files(path = "facebookdata1/", pattern="\.csv$")
files2 <- list.files(path = "facebookdata2/", pattern="\.csv$")
if(length(setdiff(files1, files2))>0)
stop("Actually, the two directories do not have the same files")
for (file in files1) {
varname <- substr(file, start=1, stop=nchar(file)-4)
data1 <- read.csv(file.path("facebookdata1", file))
data1 <- read.csv(file.path("facebookdata2", file))
assign(varname, rbind(data1, data2))
}
以下内容应该可以完成这项工作:
directories <- c("path/to/facebookdata1", "path/to/facebookdata2")
files <- lapply(directories, list.files, pattern="*.csv", full.names = TRUE)
files <- lapply(files, sort)
dat <- Map(function(x,y) { rbind(read.csv(x), read.csv(y)) },
files[[1]], files[[2]])
现在它们是dat的列表元素。 如果你想将它们分配给 globalenv 使用
list2env(dat)
您可以使用 data.table
来加快进程,如下所示:
require(data.table)
dat <- Map(function(x,y) { rbindlist(fread(x), fread(y)) },
files[[1]], files[[2]])