R语言不等长分组下计算NEE相对响应并构建新数据框
R实现分组计算NEE相对响应值
以下两种方法均可自动适配不同日期的Plot数量差异,无需额外处理样本量不一致的问题:
方法1:使用tidyverse(dplyr)实现(代码更简洁)
# 加载依赖包 library(dplyr) result <- df %>% # 按日期分组 group_by(TIME) %>% summarise( # 按公式计算相对响应值 NEE = (mean(NEE[Treat == "D"], na.rm = TRUE) - mean(NEE[Treat == "C"], na.rm = TRUE)) / mean(NEE[Treat == "C"], na.rm = TRUE) ) %>% ungroup()
如果你的数据不存在缺失值,可以去掉代码中的na.rm = TRUE参数
方法2:使用R基础函数实现(无需额外安装包)
# 按日期拆分数据 df_split <- split(df, df$TIME) # 遍历每个日期分组计算结果 result <- do.call(rbind, lapply(df_split, function(per_date){ mean_d <- mean(per_date$NEE[per_date$Treat == "D"], na.rm = TRUE) mean_c <- mean(per_date$NEE[per_date$Treat == "C"], na.rm = TRUE) data.frame( TIME = unique(per_date$TIME), NEE = (mean_d - mean_c) / mean_c ) })) # 重置行名 rownames(result) <- NULL
运行上述任意代码即可得到仅包含TIME和计算后NEE的目标数据框,第一个日期的计算结果与你给出的示例公式完全匹配。
内容的提问来源于stack exchange,提问作者LEE
相关产品推荐
相关产品推荐

