【问题标题】:How to manipulate a folder of excel files in R?如何在R中操作excel文件的文件夹?
【发布时间】:2020-11-19 15:51:59
【问题描述】:

所以我有一个格式相同的 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 首选

【问题讨论】:

  • 你能在你的问题中举一个你的目录结构的例子吗?

标签: r loops dplyr


【解决方案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)    
    

    或者,您可以手动将文件定义到列表中,但要点是该脚本将:

    • 遍历该列表中的每个文件,并针对每个文件:
    • 读入电子表格
    • 执行数据操作
    • 将所有结果绑定到数据帧中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2015-12-11
      • 2014-01-18
      • 2015-04-15
      相关资源
      最近更新 更多