R data.table按组计算子组value与指定参考子组(如plot_4)的比值
实现方案
直接使用data.table的分组语法即可实现需求,无需额外依赖包:
最简写法(直接计算比值,可灵活指定参考子组)
library(data.table) # 指定参考子组 ref_plot <- "plot_4" # 按crop分组计算各子组与参考子组的value比值 DT[, ratio_to_ref := value / value[plotnum == ref_plot], by = crop]
同时保留参考值列的写法(符合你最初的思路)
DT[, `:=`( # 填充当前组参考子组的value到全组 ref_value = value[plotnum == ref_plot], # 计算比值 ratio_to_ref = value / ref_value ), by = crop]
增加异常兼容的写法
如果存在部分crop组缺少指定参考子组的情况,可以增加判断避免报错:
DT[, ratio_to_ref := { ref_val <- value[plotnum == ref_plot] # 仅当组内有且仅有一个参考子组时计算比值,否则返回NA if(length(ref_val) == 1) value / ref_val else NA_real_ }, by = crop]
计算结果验证示例
以BellPepper组为例,参考子组plot_4的value为37.65809:
- plot_1的比值为
71.03528 / 37.65809 ≈ 1.886 - plot_2的比值为
212.1139 / 37.65809 ≈ 5.633
和实际运行结果一致。
内容的提问来源于stack exchange,提问作者JerryN
相关产品推荐
相关产品推荐

