如何在R中按列序号而非列名计算指定列的均值
计算数据框固定列(第26列)的均值
问题背景
数据框中第26列为最新年月的数值数据(列名随月份动态变化,如Dec-23、Jan-24),需计算该列均值,无需手动修改列名。
数据框结构示例:
| OrgCode | ... | Oct-23 | Nov-23 | Dec-23 |
|---|---|---|---|---|
| OrgA | ... | 0.78 | 0.56 | 0.76 |
| OrgB | ... | 0.36 | 0.46 | 0.74 |
| OrgC | ... | 0.48 | 0.66 | 0.96 |
错误尝试与原因
尝试1
z_name = names(df[,26]) z = df$z_name
错误提示:
Warning message:
Unknown or uninitialised column:z_name
原因:df$z_name会按字面字符串"z_name"查找列,而非变量z_name存储的列名,需用[[ ]]而非$引用变量存储的列名。另外names(df[,26])写法冗余,正确获取第26列列名应为names(df)[26]。
尝试2
mean.df.latest = df %>% mean(.[[26]])
错误提示:
Warning: argument is not numeric or logical: returning NA
原因:管道会将整个数据框传给mean(),mean()默认处理数据框整体而非单列向量,导致类型不匹配报错。需先提取单列向量再计算均值。
正确解决方案
方法1:直接通过列索引提取向量计算
# 提取第26列向量并计算均值,na.rm=TRUE忽略缺失值 mean_latest = mean(df[[26]], na.rm = TRUE)
方法2:先获取列名再提取计算
# 获取第26列的列名 z_name = names(df)[26] # 通过列名提取向量计算均值 mean_latest = mean(df[[z_name]], na.rm = TRUE)
方法3:使用dplyr管道的正确写法
library(dplyr) mean_latest = df %>% pull(26) %>% # 提取第26列的数值向量 mean(na.rm = TRUE)
内容的提问来源于stack exchange,提问作者Emma541
相关产品推荐
相关产品推荐

