Обертывание mutate в функции logi c для использования с lapply - PullRequest
1 голос
/ 09 апреля 2020

Я только начал изучать, как использовать lapply. Я ищу, чтобы прочитать папку CSV, изменить их, чтобы создать переменную state (которая основана на метке имени файла), а затем связать их в целом.

Однако я немного озадачен частью mutate этого процесса. Я просмотрел несколько сообщений, и кажется, что самый простой способ сделать это - заключить мои команды в функцию logi c и затем проанализировать их с помощью 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)

1 Ответ

2 голосов
/ 09 апреля 2020

В функции 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)
...