【问题标题】:Creating a loop to perform a code on multiple excel spreadsheets创建循环以在多个 Excel 电子表格上执行代码
【发布时间】:2021-07-26 05:08:37
【问题描述】:

我有一个代码,我在以邮政编码命名的 Excel 电子表格上执行零膨胀模型。我的目录中有 174 张这样的表格。我需要在每个电子表格上运行代码。怎么能一次搞定?

这是我的代码:

library(pscl)
library(sandwich)
library(lmtest)
library(MASS)
library(readxl)
library(pscl)
formula <- Street ~ BackUp+Catch+Manhole+PRCP
inputData <- read_xlsx("10028.xlsx")
model.zi <- zeroinfl(formula = formula, 
                          dist    = "negbin",
                          data    = inputData)
summary(model.zi)
library(car)
Anova(model.zi,
      type="II",
      test="Chisq")
library(rcompanion)
nagelkerke(model.zi)
Anova(model.zi)$'Pr(>Chisq)'

Rsquared10028 <- nagelkerke(model.zi)$'Pseudo.R.squared'
PValue10028 <- Anova(model.zi)$'Pr(>Chisq)'

write.csv(Rsquared10028,"C:/Desktop/Rsquared10028.csv", row.names = FALSE)
write.csv(PValue10028,"C:/Desktop/PValue10028.csv", row.names = FALSE)

如果有任何帮助,我将不胜感激。我不知道如何添加 excel 文件,所以我添加了数据的图像只是为了显示格式。

10028

【问题讨论】:

标签: r excel loops iteration


【解决方案1】:

假设您的 174 张工作表是单独的文件,并且是您工作目录中的唯一文件,您可以这样做:

setwd("/path/to/wd")
formula <- Street ~ BackUp+Catch+Manhole+PRCP
lapply(list.files(), function(x){
    inputData <- read_xlsx(x)
    model.zi <- zeroinfl(formula = formula, dist = "negbin", data = inputData)
    write.csv(nagelkerke(model.zi)$'Pseudo.R.squared', paste0("C:/Desktop/Rsquared", sub("\\.xlsx", "", x), ".csv"), row.names = FALSE)
    write.csv(Anova(model.zi)$'Pr(>Chisq)', paste0("C:/Desktop/PValue", sub("\\.xlsx", "", x), ".csv"), row.names = FALSE)
    return(paste0("Done ", x)) #optional
})

【讨论】:

  • 实际上我意识到它读取的 R^2 和 P 值与手动运行单个电子表格时不同。我不确定为什么。我将在修改后的询问中发布另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2020-05-22
  • 2011-10-17
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多