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 -
您可以使用以下代码来遍历文件夹中的每个文件并进行计算:
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文件
原文地址: https://www.cveoy.top/t/topic/hX0f 著作权归作者所有。请勿转载和采集!