在dplyr::mutate中如何按组引用指定Index条件对应的Value值?
解决方案
你可以直接在分组后的mutate中通过索引定位到每组内Index == 1对应的Value值,代码如下:
library(dplyr) # 你的示例数据集 test = data.frame( Value = c(1:5, 5:1), Index = c(1:5, 1:5), GroupNum = c(rep.int(1, 5), rep.int(2, 5)) ) # 生成标准化列 test2 = test %>% group_by(GroupNum) %>% mutate(Value_Standardized = Value / Value[Index == 1]) %>% ungroup() # 可选,取消分组状态,方便后续操作
说明
- 分组后,
Value[Index == 1]会精准定位到当前组内Index等于1的那条记录的Value值,直接用这个值作为除数即可完成标准化计算。 - 如果你的数据中存在某组有多个
Index == 1的记录,可以用first(Value[Index == 1])取第一个匹配值,或者mean(Value[Index == 1])取平均值,根据实际需求调整。
运行后得到的test2核心结果示例:
Value Index GroupNum Value_Standardized 1 1 1 1 1.0 2 2 2 1 2.0 ... 6 5 1 2 1.0 7 4 2 2 0.8 ...
内容的提问来源于stack exchange,提问作者Tee
相关产品推荐
相关产品推荐

