Добавить столбец, соответствующий файлу происхождения при чтении во многих файлах CSV в R - PullRequest
0 голосов
/ 17 января 2020

Я читаю csv-файлы из списка в один набор данных, используя

x <- do.call(rbind, lapply(list, fread))

Я хотел бы добавить столбец в x, который указывает имя файла, соответствующего каждой строке.

list выглядит так:

[[1]] '~/amsterdam.csv'
[[2]] '~/atlanta.csv'
[[3]] '~/bangalore.csv'

Я бы хотел, чтобы x выглядел так

 V1   V2           city
2.5   3.4   '~/amsterdam.csv'
5.4   1.1   '~/bangalore.csv'
3.4   2.9   '~/atlanta.csv'
0.5   9.8   '~/bangalore.csv'

Есть ли способ, с помощью команды I используется, чтобы связать каждую строку х с файлом, из которого она исходит?

В настоящее время я использую al oop для этого (чтение в файле, затем добавление столбца, соответствующего имени файла, затем связывание всех файлов вместе), но мне было интересно, было ли быстрее и более чистый способ сделать это.

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Если вы используете data.table, попробуйте rbindlist вместо do.call(rbind.... Вы можете добавить новый столбец City, используя параметр idcol, который будет иметь индекс для каждого фрейма данных, которому позже может быть присвоено значение из list. Также обратите внимание, что list является внутренней функцией в R, и лучше избегать ее использования в качестве имени переменной.

library(data.table)

x <- rbindlist(lapply(list, fread), idcol = "City")
x[, City := basename(list)[City]]
0 голосов
/ 17 января 2020

Я чувствую, что это должно работать:

myFread <- function(fileName){
    data.frame(
        fread(fileName)
        , "city" = fileName
    )
}

и, конечно, это

x <- do.call(rbind, lapply(list, fread))
...