如何用dplyr将除y2外的数值列替换为列均值?
使用dplyr替换指定列以外的数值列为列均值的最优方法
问题背景
给定如下数据框:
df <- data.frame(x = c("A","A","B","B"), y1 = c(1,2,3,4), y2=c(10,20,30,40), y3=c(1,4,10,40), y4 = c(1,0,0,0))
需求是将数据框中除y2外的所有数值列替换为该列的均值,期望输出:
x y1 y2 y3 y4 A 2.5 10 13.75 0.25 A 2.5 20 13.75 0.25 B 2.5 30 13.75 0.25 B 2.5 40 13.75 0.25
解决方案
使用dplyr的mutate()结合across()函数可以高效实现需求,具体代码如下:
library(dplyr) df_result <- df %>% mutate(across(where(is.numeric) & !matches("y2"), ~ mean(.x, na.rm = TRUE)))
代码说明
where(is.numeric):筛选所有数值类型的列!matches("y2"):排除列名为y2的列~ mean(.x, na.rm = TRUE):对目标列计算均值,添加na.rm = TRUE是为了兼容含缺失值的场景,让代码更健壮
运行后即可得到符合预期的结果。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

