我刚刚开始学习如何使用lapply。我希望读取一个csv文件夹,对其进行变异以创建变量state
(基于文件名的标签),然后将其完全绑定。
但是,我对此过程的mutate
部分有些困惑。我浏览了几篇文章,看来最简单的方法是将命令包装到逻辑函数中,然后使用lapply解析它们。
这是我做的:
file_list <- list.files(pattern = "\\.csv$")
path<-"~/Downloads/Postings CSV"
read_report_data <- function(path) {
report_df <- read.csv(path)
report_df<-mutate(report_df, state=substring(report_df, 20, nchar(report_df) - 9))
}
reports <- lapply(file_list, read_report_data)%>%
bind_rows
但是,我收到此追溯错误:
Error: Column `state` must be length 726 (the number of rows) or one, not 8
不确定我为收到此错误所做的操作。非常感谢您的帮助
有效的建议
file_list <- list.files(pattern = "\\.csv$")
path<-"~/Downloads/Postings CSV"
read_report_data <- function(path) {
report_df <- read.csv(path)
mutate(report_df, state = substring(path, 20, nchar(path) - 9))
}
library(purrr)
map_dfr(file_list, read_report_data, full.names = TRUE)
在函数中,substring
不应位于完整数据集上。它可以在单个列上,也可以在此处,获得路径的substring
read_report_data <- function(path) {
report_df <- read.csv(path)
mutate(report_df, state = substring(path, 20, nchar(path) - 9))
}
现在,我们可以使用map_dfr
library(purrr)
map_dfr(file_list, read_report_data)