首页 > 解决方案 > R中的for循环问题

问题描述

我正在尝试合并一些 excel 电子表格。有 50 份文件。我希望得到 2:5 的表,除了一些只有 2:3、2:4 等的表 - 这就是我包含 try 函数的原因。我需要范围 F6:AZ2183 并且我正在转置数据。

我遇到的问题是只有最后一个文件保存到数据框 df 中。

我附上了下面的代码。如果您有任何想法,我将不胜感激!

另外,我是一个长期潜伏的第一次海报,所以如果我的礼仪很差,我很抱歉。

df <- data.frame()

for (i in 1:50){
  for (j in 2:5) {
    try({
      df.temp <- t(read_excel((paste0('FqReport',i,'.xlsx')), sheet = j, range ='F6:AZ2183'))
      df.temp <- df.temp[rowSums(is.na(df.temp)) != ncol(df.temp), ]
      df <- rbind(df, df.temp)
      rm(df.temp)
      gc()
    }, silent = TRUE)
  }
}

标签: r

解决方案


您可以阅读每个 excel 文件中可用的表格,这将避免使用try. 循环中增长的数据帧也非常低效。试试这个lapply方法。

library(readxl)
filename <- paste0('FqReport',1:50,'.xlsx')

df <- do.call(rbind, lapply(filename, function(x) {
          sheet_name <- excel_sheets(x)[-1]
          do.call(rbind, lapply(sheet_name, function(y) {
                df.temp <- t(read_excel(x, y, range ='F6:AZ2183'))
                df.temp[rowSums(is.na(df.temp)) != ncol(df.temp), ]
          }))
      }))

推荐阅读