Как управлять папкой файлов Excel в R?

#r #loops #dplyr

#r #циклы #dplyr

Вопрос:

Итак, у меня есть папка с файлами Excel, все одинаковые по формату. Вот упрощенная версия того, с чем я работаю:

 country   count  year
USA       23232  2019
USA        3993  2019
RUSSIA    67574  2019
JAPAN        31  2019
JAPAN       535  2019
 

Поэтому я хотел бы сделать следующее с каждым файлом в моей папке

 df %>% 
  group_by(country, year) %>% 
  summarize(count = sum(count))
 

В одном файле это будет выглядеть так:

   country     year count
1 JAPAN       2019   566
2 RUSSIA      2019 67574
3 USA         2019 27225
 

Итак, как я могу сделать это для каждого файла в моей папке, опять же, они идентичны. Конечной целью будет один фрейм данных со всеми данными о количестве файлов в нем. Предпочтительный вариант Tidyverse

Комментарии:

1. можете ли вы привести пример своей структуры каталогов в своем вопросе?

Ответ №1:

Этот код может быть полезен. Вы создаете функцию, которая считывает файл Excel (я использовал sheet = 1 , но вы можете изменить его). После этого вы обрабатываете и присваиваете ключевой переменной имя файла. Затем вы создаете список для выполнения процесса и, наконец, связываете содержимое с помощью bind_rows() . Здесь код:

 library(readxl)
library(dplyr)
#Extract files
vec <- list.files(path = 'Your/Path/Here',pattern = '.xlsx')
#Function
readprocess <- function(x)
{
  y <- read_excel(x,1)
  z <- y %>% 
    group_by(country, year) %>% 
    summarize(count = sum(count)) %>% mutate(Filename=x)
  return(z)
}
#Apply
List <- lapply(vec,readprocess)
#Bind
df <- do.call(bind_rows,List)
 

Ответ №2:

 folder_path <- "insert_path_here"
files <- list.files(path=folder_path)

results <- lapply(files, function(x) {
    df <- read.csv(paste0(folder_path, "/", x))
    df <- df %>% 
         group_by(country, year) %>% 
         summarize(count = sum(count))
    }
)
df_results <- do.call(bind_rows, results)    
 

В качестве альтернативы, вы могли бы просто определить свои файлы в список вручную, но суть в том, что скрипт будет:

  • Просмотрите каждый файл в этом списке и для каждого файла:
  • Читать в электронной таблице
  • Выполнять манипуляции с данными
  • Связывает все результаты в фрейм данных