您可以使用以下代码来遍历文件夹中的每个文件并进行计算:

library(dplyr)
library(tools)
require(data.table)
require(rio)

# 获取文件夹中的所有文件路径
file_paths <- list.files("E:/trainingdata/wheatOUTfile/75csv", full.names = TRUE)

# 创建一个空数据框用于存储结果
outfile <- data.frame()

# 循环遍历每个文件
for (file_path in file_paths) {
  
  # 读取数据
  f1 <- import(file_path)
  
  # 提取文件名
  file_name <- tools::file_path_sans_ext(basename(file_path))
  
  # 循环计算每个年份的结果
  for (i in 1981:2018) {
    print(i)
    ii <- i + 1
    
    f1$day <- as.numeric(f1$day)
    
    # 获取播种和成熟的日期
    a <- filter(f1, year == i, StageName == "sowing")$day
    b <- filter(f1, year == ii, StageName == "maturity")$day
    
    f2 <- filter(f1, (year == i) & (day >= a))
    f3 <- filter(f1, (year == ii) & (day <= b))
    
    df <- rbind(f2, f3)
    
    mint <- df$MinT
    maxt <- df$MaxT
    
    gdd <- gdd_calc(mint, maxt)
    
    df$GDD <- gdd
    
    avg_temperature <- mean(df$MaxT, na.rm = TRUE)
    avg_vpd <- mean(df$vpd_est, na.rm = TRUE)
    total_Radn <- sum(df$Radn, na.rm = TRUE)
    total_rainfall <- sum(df$Rain, na.rm = TRUE)
    total_GDD <- sum(gdd, na.rm = TRUE)
    sw_columns <- c("sw(1)", "sw(2)", "sw(3)", "sw(4)", "sw(5)", "sw(6)")
    sum_sowing <- sum(df[df$StageName == "sowing", sw_columns], na.rm = TRUE)
    sum_maturity <- sum(df[df$StageName == "maturity", sw_columns], na.rm = TRUE)
    difference <- sum_sowing - sum_maturity
    
    df$total_gdd <- total_GDD
    df$Maxtmean <- avg_temperature
    df$rainfall <- total_rainfall
    df$VPD <- avg_vpd
    df$total_Radn <- total_Radn
    df$SWS <- difference
    df$file_name <- file_name  # 添加原始文件名列
    
    if (i == 1981) {
      outfile <- df
    } else {
      outfile <- rbind(outfile, df)
    }
  }
}

outfile %>%
  export("E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv", row.names = FALSE)

这样,代码将遍历文件夹中的每个文件并计算结果,同时添加了一个名为file_name的列来保存原始文件名。最后,将结果输出为E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv文件

librarydplyrlibrarytoolsrequiredatatablerequirerio###calculate GDD functiongdd_calc - functionT_min T_max T_min_ - T_min T_max_ - T_max mint - ifelseT_min_ 0 0 ifelseT_min_ 30 30 T_min_ maxt -

原文地址: https://www.cveoy.top/t/topic/hX0f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录