R语言计算数据框每行均值和中位数结果异常问题咨询
核心问题有两个
- apply函数处理范围错误
你的数据集第一列student是字符类型,apply(my_data, 1, ...)按行提取数据时,会强制将整行转换为字符类型,排序、统计都按字符字典规则执行,结果不符合数值计算预期。此外你先新增的median列也会被后续计算均值的apply函数纳入计算范围,进一步导致结果失真。 - 手动调用median的语法错误
median()的核心入参是单个数值向量,你直接传入多个逗号分隔的数值时,只有第一个数值11.22369会被识别为待计算的输入,其余参数会被直接忽略,因此得到错误结果11.22。正确的手动计算写法需要将数值封装为向量:
median(c(11.22369, 15.36253, 16.90215, 20.20724, 15.90227, 15.14539, 13.74945, 18.30090, 19.55124, 17.24132))
正确实现代码
仅选择跑步成绩的数值列计算即可,两种常用写法如下:
基础R写法
# 仅选取第2到第11列的跑步成绩计算行统计值 my_data$my_median <- apply(my_data[, 2:11], 1, median, na.rm = TRUE) my_data$my_mean <- apply(my_data[, 2:11], 1, mean, na.rm = TRUE)
dplyr更稳妥写法(无需手动指定列号)
library(dplyr) my_data <- my_data %>% rowwise() %>% mutate( my_median = median(c_across(ends_with("_run")), na.rm = TRUE), my_mean = mean(c_across(ends_with("_run")), na.rm = TRUE) ) %>% ungroup()
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

