R语言代码:计算小麦生长季度日温度和相关指标
"library(dplyr)\nlibrary(tools)\nrequire(data.table)\nrequire(rio)\n\n###calculate GDD function\ngdd_calc <- function(T_min, T_max) {\n T_min_ <- T_min\n T_max_ <- T_max\n mint <- ifelse(T_min_ < 0, 0, ifelse(T_min_ > 30, 30, T_min_))\n maxt <- ifelse(T_max_ < 0, 0, ifelse(T_max_ > 30, 30, T_max_))\n gdd <- (mint + maxt) / 2 - 0\n return(gdd)\n}\n\n\n## ------------------------------ one file ---------------------------------------\n#read data\nf1 <- import("E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhou.csv")\n\n#year\ni <- 1981\n\nii <- i+1\n\nf1$day <- as.numeric(f1$day)\n\n#the doy at sowing\na <- filter(f1, year == i, StageName == "sowing")$day\n\nb <- filter(f1, year == ii, StageName == "maturity")$day\n\n\nf2 <- filter(f1, (year == i) & (day >= a))\n\nf3 <- filter(f1, (year == ii) & (day <= b))\n\ndf <- rbind(f2, f3)\n\n\n#df$sowyear <- 1981\n\n\n\nmint <- df$MinT\nmaxt <- df$MaxT\n\ngdd <- gdd_calc(mint, maxt)\n\ndf$GDD <- gdd\n\n###----------------------------------------------------------------------------\n\noutfile <- data.frame()\n\nfor (i in 1981: 2018){\n print(i)\n ii <- i+1\n \n f1$day <- as.numeric(f1$day)\n \n #the doy at sowing\n a <- filter(f1, year == i, StageName == "sowing")$day\n \n b <- filter(f1, year == ii, StageName == "maturity")$day\n \n \n f2 <- filter(f1, (year == i) & (day >= a))\n \n f3 <- filter(f1, (year == ii) & (day <= b))\n \n df <- rbind(f2, f3)\n #df$sowyear <- 1981\n \n mint <- df$MinT\n maxt <- df$MaxT\n \n gdd <- gdd_calc(mint, maxt)\n \n df$GDD <- gdd\n \n \n \n avg_temperature <- mean(df$MaxT, na.rm = TRUE)\n avg_vpd <- mean(df$vpd_est, na.rm = TRUE) \n total_Radn <-sum(df$Radn, na.rm = TRUE)\n total_rainfall <-sum(df$Rain, na.rm = TRUE)\n\n total_GDD <- sum(gdd, na.rm = TRUE) # Calculate total GDD\n # Calculate the difference between sum_sowing and sum_maturity for the current year\n sw_columns <- c("sw(1)", "sw(2)", "sw(3)", "sw(4)", "sw(5)", "sw(6)")\n sum_sowing <- sum(df[df$StageName == "sowing", sw_columns], na.rm = TRUE)\n sum_maturity <- sum(df[df$StageName == "maturity", sw_columns], na.rm = TRUE)\n difference <- sum_sowing - sum_maturity\n \n \n \n df$total_gdd <- total_GDD\n df$Maxtmean <- avg_temperature\n df$rainfall <- total_rainfall\n df$VPD <- avg_vpd\n df$total_Radn <- total_Radn\n df$SWS <- difference\n if (i == 1981) {\n outfile <- df\n } else {\n outfile <- rbind(outfile, df)\n }\n}\n\noutfile %>% \n export("E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout.csv", row.names = FALSE)\n\noutfile_maturity <- outfile[outfile$StageName == "maturity", ]\noutfile_maturity %>% \n export("E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv", row.names = FALSE)\n\n\n\n这是计算单个文件中连续年的结果,请修改代码使其遍历文件夹中每个文件,并增加一列用来保存原始文件名,将结果输出为E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv内容:您可以使用以下代码来遍历文件夹中的每个文件并进行计算:\n\n{r}\nlibrary(dplyr)\nlibrary(tools)\nrequire(data.table)\nrequire(rio)\n\n# 获取文件夹中的所有文件路径\nfile_paths <- list.files("E:/trainingdata/wheatOUTfile/75csv", full.names = TRUE)\n\n# 创建一个空数据框用于存储结果\noutfile <- data.frame()\n\n# 循环遍历每个文件\nfor (file_path in file_paths) {\n \n # 读取数据\n f1 <- import(file_path)\n \n # 提取文件名\n file_name <- tools::file_path_sans_ext(basename(file_path))\n \n # 循环计算每个年份的结果\n for (i in 1981:2018) {\n print(i)\n ii <- i + 1\n \n f1$day <- as.numeric(f1$day)\n \n # 获取播种和成熟的日期\n a <- filter(f1, year == i, StageName == "sowing")$day\n b <- filter(f1, year == ii, StageName == "maturity")$day\n \n f2 <- filter(f1, (year == i) & (day >= a))\n f3 <- filter(f1, (year == ii) & (day <= b))\n \n df <- rbind(f2, f3)\n \n mint <- df$MinT\n maxt <- df$MaxT\n \n gdd <- gdd_calc(mint, maxt)\n \n df$GDD <- gdd\n \n avg_temperature <- mean(df$MaxT, na.rm = TRUE)\n avg_vpd <- mean(df$vpd_est, na.rm = TRUE)\n total_Radn <- sum(df$Radn, na.rm = TRUE)\n total_rainfall <- sum(df$Rain, na.rm = TRUE)\n total_GDD <- sum(gdd, na.rm = TRUE)\n sw_columns <- c("sw(1)", "sw(2)", "sw(3)", "sw(4)", "sw(5)", "sw(6)")\n sum_sowing <- sum(df[df$StageName == "sowing", sw_columns], na.rm = TRUE)\n sum_maturity <- sum(df[df$StageName == "maturity", sw_columns], na.rm = TRUE)\n difference <- sum_sowing - sum_maturity\n \n df$total_gdd <- total_GDD\n df$Maxtmean <- avg_temperature\n df$rainfall <- total_rainfall\n df$VPD <- avg_vpd\n df$total_Radn <- total_Radn\n df$SWS <- difference\n df$file_name <- file_name # 添加原始文件名列\n \n if (i == 1981) {\n outfile <- df\n } else {\n outfile <- rbind(outfile, df)\n }\n }\n}\n\noutfile %>%\n export("E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv", row.names = FALSE)\n\n\n这样,代码将遍历文件夹中的每个文件并计算结果,同时添加了一个名为file_name的列来保存原始文件名。最后,将结果输出为E:/trainingdata/wheatOUTfile/75csv/Hebei_bazhouout_maturity.csv文件。
原文地址: https://www.cveoy.top/t/topic/pG6R 著作权归作者所有。请勿转载和采集!