r - 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)
}
}
解决方案
您可以阅读每个 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), ]
}))
}))
推荐阅读
- python-3.x - Keras:加载数据集并自动裁剪图像的相关区域
- awk - 从配置文件中提取并打印所有出现的磁盘文件 (.img)
- c - 需要测试异步 I/O
- .net-core - 根据 Kestrel 中的 Host 标头选择证书
- javascript - 使用 JS 在 MVC 中加载部分视图时出错
- c# - 每 n 次 C# 记录百分比进度
- node.js - 无法使用 jest 在nodejs中模拟类的实例函数(来自类的新实例的函数)
- powershell - .AddDays() 方法后的 Powershell 格式日期
- java - String 类型没有属性 XXX!在从复合主键项中设置的 JPA 派生查询中
- agda - 没有大小类型的 corecursive Agda 函数