基于双列与重复ID分组的Base R中位数计算方案问询
一行Base R实现分组中位数替换(含重复ID归组)
直接用这行代码就能完成需求,无需自定义函数:
df$value <- with(df, ave(value, interaction(ifelse(ave(id, id, FUN = length) > 1, "AB", group), num), FUN = median))
代码逻辑拆解
- 识别重复ID:
ave(id, id, FUN = length) > 1会标记出所有出现多次的ID(该ID对应的每一行都会返回TRUE) - 重定义分组规则:通过
ifelse把重复ID对应的group替换为"AB",非重复ID保留原group值 - 构建分组键:
interaction(...)将处理后的分组与num合并成唯一的分组标识,实现同时按两个维度分组 - 计算并替换中位数:
ave(value, ..., FUN=median)会针对每个分组计算中位数,返回与原value长度一致的向量,直接赋值回原列即可
匹配示例预期
对于你提供的示例中重复的id17-20,它们的value值为c(21,67,80,69),归到AB 0.1组后的中位数为(67+69)/2 = 68.0,完全符合预期;非重复ID则按原group+num分组计算中位数替换。
内容的提问来源于stack exchange,提问作者SchlaWiener
相关产品推荐
相关产品推荐

