包装逻辑函数以与lapply一起使用

问题描述 投票:1回答:1

我刚刚开始学习如何使用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)
r logic lapply mutate
1个回答
2
投票

在函数中,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)
© www.soinside.com 2019 - 2024. All rights reserved.