【问题标题】:Running subsetting function over multiple excel sheets and multiple files在多个 excel 工作表和多个文件上运行子集功能
【发布时间】:2015-11-24 21:51:51
【问题描述】:

我继承了一堆 excel 文件,每个文件都包含多个工作表。 每张纸看起来像这样:

str(mydata)
'data.frame':   29 obs. of  23 variables:
 $ Gyffin    : Factor w/ 11 levels "% of total activity added",..: 9 NA 11 4        7 5 6 8 NA NA ...
 $ X2.5.hours: Factor w/ 19 levels "-0.413614051315461",..: 13 8 NA 14 12 11 10 9 NA NA ...
 $ X24.hours : num  5887 NA NA 6310 6291 ...
 $ X48.hours : num  5837 NA NA 6370 6201 ...
 $ X72.hours : Factor w/ 19 levels "-0.112994944133188",..: 10 NA 19 13 12 11 9 8 NA NA ...
 $ NA.       : Factor w/ 15 levels "0","0.314915755033141",..: NA NA 15 10 11 12 13 14 NA NA ...
 $ NA..1     : logi  NA NA NA NA NA NA ...
 $ NA..2     : Factor w/ 19 levels "0","100","1271.6",..: 15 6 NA 7 12 5 3 4 NA NA ...
 $ NA..3     : num  NA NA NA 2947 3241 ...
 $ NA..4     : num  NA NA NA 2817 3605 ...
 $ NA..5     : Factor w/ 18 levels "0","100","1520.4",..: NA NA 18 8 10 5 4 3 NA NA ...
 $ NA..6     : Factor w/ 16 levels "0","1.88229983116934",..: NA NA 16 13 11 8 7 6 NA NA ...
 $ NA..7     : logi  NA NA NA NA NA NA ...
 $ NA..8     : Factor w/ 19 levels "0","10.3482969177356",..: 13 5 NA 7 6 11 15 14 NA NA ...
 $ NA..9     : num  NA NA NA 3963 2736 ...
 $ NA..10    : num  NA NA NA 3504 2762 ...
 $ NA..11    : Factor w/ 18 levels "0","100","2805.56666666667",..: NA NA 18 4 3 8 10 7 NA NA ...
 $ NA..12    : Factor w/ 12 levels "0","0.290827113462025",..: NA NA 12 7 10 8 6 11 NA NA ...
 $ NA..13    : Factor w/ 19 levels "0","100","14C Glucose-6-phosphate",..: 12 3 NA 7 11 9 10 8 NA NA ...
 $ NA..14    : num  NA NA NA 4300 5045 ...
 $ NA..15    : num  NA NA NA 4367 5090 ...
 $ NA..16    : Factor w/ 18 levels "0","1.23360797663463",..: NA NA 18 8 10 6 9 7 NA NA ...
 $ NA..17    : Factor w/ 15 levels "0","0.132468292842382",..: NA NA 15 9 8 7 14 6 NA NA ...

我想运行以下子集代码:

mydata <- read.xlsx("All sites July_Aug 2015.xlsx", sheetName = "Gyffin")
uptake <- mydata[23:28,]
uptake_1 <- uptake[c(1,5,6,11,12,17,18,22,23)]
library(plyr)
uptake_2 <- rename(uptake_1,c("Gyffin" = "Time", "X72.hours" = "Mean_1", "NA." = "SEM_1", "NA..5" = "Mean_2", "NA..6" = "SEM_2", "NA..11" = "Mean_3", "NA..12" = "SEM_3", "NA..16" = "Mean_4", "NA..17" = "SEM_4"))

摄取_2

然后导出为csv:

write.csv(uptake_2, "Gyffin_Summer_Uptake.csv")

所以我在编写一个循环的帮助后,这样我就可以在每个文件中的每个工作表上运行上面的代码和目录。我设法创建了 for 循环以从多个 .csv 文件生成图形,但我完全被这个难住了。

【问题讨论】:

  • 如果你以前做过 for 循环,你并没有完全被难住。在目录中循环工作表和文件非常常见。 SO和google上有很多问题和答案。

标签: r excel loops for-loop


【解决方案1】:

将函数包装在一个循环中。创建一个包含所有文件名的向量和一个包含输出文件名的向量:

library(plyr)
excel_files <- all-of-your-file-names-here..
output_file_names <- output-file-names-here..

for(i in all_files) {
  mydata <- read.xlsx(excel_files[i], sheetName = "Gyffin")
  uptake <- mydata[23:28,]
  uptake_1 <- uptake[c(1,5,6,11,12,17,18,22,23)]
  uptake_2 <- rename(new-names-here..
  write.csv(uptake_2, output_file_names[i])
}

【讨论】:

  • 感谢您的帮助。这样做的问题是它只会为sheetName = "Gyffin" 运行。我需要循环遍历每个 excel 文件中的每个工作表的函数
  • 每张工作表都有一组替换列名吗?
  • 每张工作表的列名与上述相同
  • 您很可能必须将openxlsx 与循环一起使用。您需要的三个功能是loadWorkbook 获取excel 文件,writeData 编辑每个工作表,saveWorkbook 保存文件。我现在不能做全部事情,但要研究这三个功能。 cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
  • 这可能有助于将您的任务分解为更小的问题,因为正如您所要求的那样,必须有人为您的整个项目提供代码来回答它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
相关资源
最近更新 更多