R中按y分组计算x<10时z的均值并新增对应取值列的方法问询
R数据框按条件分组计算新增列实现方法
核心实现(tidyverse/dplyr 方案)
你需要在计算分组均值时仅筛选符合x<10条件的z值,再配合条件分支赋值即可实现需求,正确代码如下:
library(dplyr) df %>% group_by(y) %>% mutate(new_col = ifelse(x < 10, mean(z[x < 10]), z)) %>% ungroup() # 若后续不需要保留分组状态可加上该行
逻辑说明
- 分组后计算均值时通过
z[x < 10]筛选当前分组内所有满足x<10的z值再计算均值,不会纳入分组内x>=10的数值 - 用
ifelse做分支判断:x<10的行取分组条件均值,其余行直接取当前行的z值 - 若存在某分组下无符合x<10的记录,均值计算会返回NA,可按需在
mean函数中添加na.rm = TRUE参数处理
基础R实现方案(无需加载第三方包)
df$new_col <- ave(df$z, df$y, FUN = function(grp_z, grp_x) { ifelse(grp_x < 10, mean(grp_z[grp_x < 10]), grp_z) }, grp_x = df$x)
内容的提问来源于stack exchange,提问作者Macosso
相关产品推荐
相关产品推荐

