我正在将大量 .csv 文件读入单个数据帧。正如这个问题的答案所示,我已经在这方面得到了很大的帮助。
library(data.table)
files.to.read <- list.files(path = "./data",
pattern = ".*\\.csv$",
full.names = TRUE,
recursive = FALSE)
L <- lapply(files.to.read, fread)
DT <- rbindlist(L, use.names = TRUE, fill = TRUE)
我的数据集没有标记观察年份的变量,而是包含在文件名中,例如asdf_19.csv 其中 19 指 2019 年。
从上面的代码开始,我想添加一些内容,以便在最终数据框中创建一个新列,该列标记来自文档名称末尾的相关数字。
目前我最好的选择是为每个文件手动添加此内容,但我很想避免这样做......
谢谢!
我非常喜欢使用
purrr::enframe
(将名称应用到列表后):
library(tidyverse)
library(data.table)
dir.create("fake_data")
2014:2018 |>
walk(\(year) write_csv(tibble(a = 1:100), file.path("fake_data", paste0("yr_", year, ".csv"))))
files.to.read <- list.files(path = "fake_data",
pattern = ".*\\.csv$",
full.names = TRUE,
recursive = FALSE)
L <- lapply(files.to.read, fread)
names(L) <- str_extract(files.to.read, "\\d*(?=\\.csv)")
L |>
enframe("year", "data") |>
unnest(data)
#> # A tibble: 500 × 2
#> year a
#> <chr> <int>
#> 1 2014 1
#> 2 2014 2
#> 3 2014 3
#> 4 2014 4
#> 5 2014 5
#> 6 2014 6
#> 7 2014 7
#> 8 2014 8
#> 9 2014 9
#> 10 2014 10
#> # ℹ 490 more rows