我正在尝试在which uses ldply to combine multiple csv files into one dataframe
处应用代码我正在尝试找出合适的tidyverse
语法是什么,以添加一列以列出数据来源文件的名称。
这就是我所拥有的
test <- ldply( .data = list.files(pattern="*.csv"),
.fun = read.csv,
header = TRUE) %>%
mutate(filename=gsub(".csv","",basename(x)))
我知道
“ basename(x)中的错误:找不到对象'x'消息”。
我的理解是该基本名(路径),但是当我将路径设置为包含文件的文件夹时,最后被添加的文件名列仅具有文件夹名称。
非常感谢您的帮助!
答案 0 :(得分:1)
您可以使用purrr::map_dfr
purrr::map_dfr(list.files(pattern="*.csv", full.names = TRUE),
~read.csv(.x) %>% mutate(file = sub(".csv$", "", basename(.x))))
答案 1 :(得分:0)
我们可以使用imap
library(purrr)
library(dplyr)
library(stringr)
library(readr)
files <- list.files(pattern="*.csv", full.names = TRUE)
fileSub <- str_remove(basename(files), "\\.csv$")
imap_dfr(setNames(files, fileSub), ~ read_csv(.x) %>%
mutate(file = .y))
答案 2 :(得分:0)
我不知道这是否对任何人有帮助,我偶然发现了这个非常简单的解决方案。
上下文:由 ldply 创建的 .id 列列出了输入向量中每个项目的名称。因此,要合并多个 csv 文件并使用文件名创建一个新列,您可以执行以下操作:
# get csv files in current working directory as a character vector
file_names <- list.files(pattern="*.csv") #for the example above it is .data=list.files(pattern="*.csv")
# Name these items (in this case equal to the items themselves, but can be subbed out for sample.Ids)
names(file_names) <- paste(file_names) # or for the example above names(.data) <- paste(.data)
# then use ldply to do the hard work
combined_csv <- ldply(file_names, read.csv)
# Names are stored under .id
combined_csv$.id