R语言:为DataFrame添加多列均值列的更简洁实现方法问询
简化R中计算多列均值并添加新列的方法
嘿,你的需求其实可以用更清爽的方式实现,不用绕那么多bind_cols的步骤!下面给你几种简洁的方案:
方法1:dplyr的mutate直接结合rowMeans
这是最直接的简化版,直接在原数据框里生成新列,省去中间的绑定操作:
library(dplyr) narrow_ds <- narrow_ds %>% mutate(eng = rowMeans(select(., starts_with("eng")), na.rm = TRUE))
这里select(., starts_with("eng"))直接选中所有以eng开头的列,传给rowMeans计算行均值,na.rm=TRUE直接作为参数传入,一步到位。
方法2:tidyverse的rowwise + c_across
如果更习惯tidyverse的逐行操作语法,这个方案可读性拉满:
library(dplyr) narrow_ds <- narrow_ds %>% rowwise() %>% mutate(eng = mean(c_across(starts_with("eng")), na.rm = TRUE)) %>% ungroup()
rowwise()让后续操作按行执行,c_across()可以选中指定范围的列,然后用mean()计算均值,最后记得ungroup()恢复数据框的默认分组状态。
方法3:Base R实现(无需加载dplyr)
如果不想依赖dplyr,用Base R也能轻松搞定:
narrow_ds$eng <- rowMeans(narrow_ds[, startsWith(names(narrow_ds), "eng")], na.rm = TRUE)
startsWith(names(narrow_ds), "eng")筛选出列名以eng开头的列,然后用rowMeans计算行均值,直接赋值给新列eng。
这些方法都比你原来的代码简洁很多,而且都保留了na.rm=TRUE的缺失值处理,完美解决你的需求~
内容的提问来源于stack exchange,提问作者Kevin T
相关产品推荐
相关产品推荐

