R语言计算含指定关键词的列(排除同关键词最后一列)的行均值
R 行均值计算修正方案
错误原因
你使用的mutate_at()是列向的批量计算函数,会对每一个选中的列单独执行计算逻辑,因此会为每个匹配列生成独立的均值列,无法实现多列按行汇总计算均值的需求。
修正代码(适配dplyr 1.0及以上版本,官方推荐写法)
library(dplyr) # 构造示例数据 df <- data.frame( ABC_1 = runif(3), ABC_2 = runif(3), ABC_3 = runif(3), ABC_4 = runif(3) ) # 计算逻辑 df_result <- df %>% rowwise() %>% # 按行分组 mutate( # 提取所有含ABC的列中最后一列的数值作为max列 max = last(c_across(contains("ABC"))), # 提取所有含ABC的列、排除最后1列后,计算当前行的均值 row_mean = mean(c_across(head(contains("ABC"), -1)), na.rm = TRUE) ) %>% ungroup() # 取消行分组,避免影响后续数据操作
输出示例
# A tibble: 3 × 6 ABC_1 ABC_2 ABC_3 ABC_4 max row_mean <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0.266 0.796 0.388 0.811 0.811 0.483 2 0.401 0.332 0.976 0.166 0.166 0.570 3 0.567 0.538 0.486 0.541 0.541 0.530
逻辑说明
c_across()会在按行分组的前提下,将选中的多列合并为一个一维向量,作为后续mean()、max()等聚合函数的输入,最终得到每行的汇总结果head(contains("ABC"), -1)代表选中所有列名包含ABC的列,再排除最后1个匹配的列,完全符合筛选需求
内容的提问来源于stack exchange,提问作者Rodrigo Badilla
相关产品推荐
相关产品推荐

