R - Добавление filepath к каждой строке кадра данных - PullRequest
0 голосов
/ 26 февраля 2019

Я относительно новичок в 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)

Я искал старые ответы, но не смог сделать это, поэтому ятеперь я не уверен, что это можно сделать с помощью имеющейся у меня кодировки.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Если вы объедините этот ответ

https://stackoverflow.com/a/44304004/3438524 (к вопросу: Считайте несколько данных CSV и создайте новые столбцы одновременно )

с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)))]
0 голосов
/ 26 февраля 2019

Я думаю, вы хотите ?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
...