gpt4 book ai didi

r - 在读取和绑定(bind)多个文件时将 "filename"列添加到表中

转载 作者:行者123 更新时间:2023-12-04 09:18:24 25 4
gpt4 key购买 nike

我在多个目录中有许多 csv 文件,我想将它们读入 R tribble 或 data.table。我使用“list.files()”并将递归参数设置为 TRUE 创建文件名和路径列表,然后使用“lapply()”读取多个 csv 文件,然后使用“bind_rows()”将它们全部粘贴一起:

filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
tbl <- lapply(filenames, read_csv) %>%
bind_rows()

这种方法效果很好。但是,我需要从每个文件名中提取一个子字符串并将其作为列添加到最终表中。我可以像这样使用“str_extract()”获取我需要的子字符串:
sites <- str_extract(filenames, "[A-Z]{2}-[A-Za-z0-9]{3}")

但是,我被困在如何将提取的子字符串添加为列,因为 lapply() 通过 read_csv() 为每个文件运行。

最佳答案

tidyverse方法:
更新:readr 2.0(及更高版本)现在内置支持在单个命令中将具有相同列的文件列表读取到一个输出表中。只需将要在同一向量中读取的文件名传递给读取函数。例如读取 csv 文件:

(files <- fs::dir_ls("D:/data", glob="*.csv"))
dat <- read_csv(files, id="path")
或者 使用 map_dfrpurrr :
使用 .id = "source" 添加文件名 purrr::map_dfr() 中的参数
加载 .csv 文件的示例:
 # specify the directory, then read a list of files
data_dir <- here("file/path")
data_list <- fs::dir_ls(data_dir, regexp = ".csv$")

# return a single data frame w/ purrr:map_dfr
my_data = data_list %>%
purrr::map_dfr(read_csv, .id = "source")

# Alternatively, rename source from the file path to the file name
my_data = data_list %>%
purrr::map_dfr(read_csv, .id = "source") %>%
dplyr::mutate(source = stringr::str_replace(source, "file/path", ""))

关于r - 在读取和绑定(bind)多个文件时将 "filename"列添加到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com