我是R的新手,我正在创建一个数据帧,我在同一文件夹的不同子文件夹中有许多.csv文件。到目前为止,我有这个:
setwd("~/LMB/Top 6 - 2019/Juegos")
Batting.files <- list.files(path = "~/LMB/Top 6 - 2019/Juegos/",
recursive = T, pattern=c("(statsHomeBatting.csv|statsVisitorBatting.csv)",
full.names=T))
setwd("~/LMB/Top 6 - 2019/Juegos/")
Batting.Logs <- do.call(rbind,lapply(Batting.files,read.csv, check.names = FALSE, sep = ";"))
我有文件的子文件夹如下所示:
~\LMB\Top 6 - 2019\Juegos\Lanús at Ferro Feb 10
我想要的是在每一列中都有一个变量(让我们将它命名为Batting.Logs$Game
,它显示目录的最后一部分(在本例中为Lanús at Ferro Feb 10
)
我已经搜索了旧的答案,但我还没有完成它,所以我现在不确定它可以用我当前的编码完成。
提前致谢!
如果你结合这个答案
https://stackoverflow.com/a/44304004/3438524(问题:Read multiple csv data and create new columns at one time)
使用dirname和basename(已经发布了npjc:https://stackoverflow.com/a/54888162/3438524),这应该可以解决问题。
Batting.files <- list.files(path = "~/LMB/Top 6 - 2019/Juegos/",
recursive = T, pattern=c("(statsHomeBatting.csv|statsVisitorBatting.csv)",
full.names=T))
dt.list <- sapply(file.list, fread, simplify=FALSE,data.table=F)
DT <- rbindlist(dt.list, idcol = 'folder')[, `:=` (folder = basename(dirname(folder)))]
我想你想要?dirname()
和?basename()
。
dirname(path)
返回路径的一部分,但不包括最后一个路径分隔符,或“。”如果没有路径分隔符。
basename(path)
删除所有路径,包括最后一个路径分隔符(如果有)。
具有两个路径的数据框,以获取直接父目录,首先提取目录名称,然后提取结果的基本名称。
d <- data.frame(path = c('path/to/some/file.csv', 'path/to/another/file.csv'),
stringsAsFactors = F)
d$file_dir <- basename(dirname(d$path))
d
#> path file_dir
#> 1 path/to/some/file.csv some
#> 2 path/to/another/file.csv another