我正在使用 leerssej here 提供的优雅的 tidyverse 解决方案来读取多个 csv,如下所示:
df <- list.files(path = "../Data/Raw_1HR",
pattern = "\\.csv$",
full.names = T) %>%
map_df(~read.csv(.,
skip = 7,
sep = ",",
header = T,
colClasses = "character"))
但是,我需要向每个单独的数据帧添加一列来表示它来自哪里。这包含在文件名中。假设文件名是
id01_foo.csv
、id02_foo.csv
等,其中名称由前 4 个字符表示(即 id01、id02 等)。
如何将这些 id 作为字符列合并到生成的
df
对象中?
如果我们将
list.files
的结果命名,然后使用 map_dfc(..., .id="filename")
,它将成为框架的新列。
df <- list.files(path = "../Data/Raw_1HR",
pattern = "\\.csv$",
full.names = T) %>%
setNames(., nm = basename(.)) %>%
map_df(~read.csv(.,
skip = 7,
sep = ",",
header = T,
colClasses = "character"),
.id = "filename")
这将根据文件名命名它们(使用
basename(.)
),但我们可以仅使用 setNames(nm = .)
轻松使用整个路径。