我有大量想要读入R的csv文件。csv中的所有列标题都是相同的。起初,我认为我需要根据文件名列表创建一个循环,但在搜索之后,我发现了一种更快的方法。这会正确地读入并组合所有的csvs (据我所知)。
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。我想要一个标记为'source‘的列,它包含来自特定行的csv的名称。例如,如果csv名为Chicago_IL.csv,当数据进入R时,行将如下所示:
> City State Market etc Source
> Burbank IL Western etc Chicago_IL
发布于 2011-03-04 05:48:12
试试这个:
do.call("rbind", sapply(filenames, read.csv, simplify = FALSE))
行名将指示来源和行号。
发布于 2011-03-04 05:19:34
有点乱七八糟,但很管用:
filenames <- c("foo.csv","bar.csv")
import.list <- list(matrix(,4,4),matrix(6,6))
source <- unlist(sapply(1:length(filenames),function(i)rep(gsub(".csv","",filenames[i]),nrow(import.list[[i]]))))
source
[1] "foo" "foo" "foo" "foo" "bar" "bar" "bar" "bar" "bar" "bar"
combined$source <- source
发布于 2018-04-23 19:30:53
我发现这是一个工作,它创建新的列和合并整个文件夹的csv文件。
使用setNames():
file.list <- list.files(pattern = '*.csv')
file.list <- setNames(file.list, file.list)
df.list <- lapply(file.list, read_csv)
df.list <- Map(function(df, name) {
df$issue <- name
df
}, df.list, names(df.list))
df <- rbindlist(df.list,use.names = TRUE, fill = TRUE, idcol = "Issue")
这一行创建源文件的新列,并将它们合并。
https://stackoverflow.com/questions/5186570
复制相似问题