在将多个CSV读入R时,如何将文件名转换为变量

在将多个CSV读入R时,如何将文件名转换为变量,r,csv,import,R,Csv,Import,我有一堆csv文件,它们遵循命名方案:est2009US.csv 我将它们读入R,如下所示: myFiles <- list.files(path="~/Downloads/gtrends/", pattern = "^est[[:digit:]][[:digit:]][[:digit:]][[:digit:]]US*\\.csv$") myDB <- do.call("rbind", lapply(myFiles, read.csv, header = TRUE)) myFil

我有一堆csv文件,它们遵循命名方案:est2009US.csv

我将它们读入R,如下所示:

myFiles <- list.files(path="~/Downloads/gtrends/", pattern = "^est[[:digit:]][[:digit:]][[:digit:]][[:digit:]]US*\\.csv$")

myDB <- do.call("rbind", lapply(myFiles, read.csv, header = TRUE))

myFiles您可以首先从
lappy
创建对象

Lapply <- lapply(myFiles, read.csv, header=TRUE))
names(Lapply) <- myFiles
for(i in myFiles) 
    Lapply[[i]]$Source = i
do.call(rbind, Lapply)

lappy
Nrows您可以通过使用一个匿名函数来避免两次循环,该函数将文件名作为列分配给每个
data.frame
,与您用于读取CSV的
lappy
相同

myDB <- do.call("rbind", lapply(myFiles, function(x) {
  dat <- read.csv(x, header=TRUE)
  dat$fileName <- tools::file_path_sans_ext(basename(x))
  dat
}))

myDB
plyr
使这非常容易:

library(plyr)
paths <- dir(pattern = "\\.csv$")
names(paths) <- basename(paths)

all <- ldply(paths, read.csv)
库(plyr)

在这里使用Lapply不是令人困惑吗?
library(plyr)
paths <- dir(pattern = "\\.csv$")
names(paths) <- basename(paths)

all <- ldply(paths, read.csv)