提取数据集最后100条后调用mean()报错:argument is not numeric or logical
问题排查与修复方案
报错原因
last_100_entries是通过tail()提取的子数据框,并非单一的数值/逻辑向量。mean()函数的默认方法mean.default仅支持对向量计算均值,直接传入数据框会因类型不匹配触发警告,返回NA。
修复方法
情况1:计算某一列的均值(比如balance列)
明确指定要计算均值的列,提取该列的向量后再调用mean():
dat <- read.csv("Default.csv", stringsAsFactors = TRUE) last_100_entries <- tail(dat, 100) # 提取balance列并计算均值,na.rm=TRUE用于忽略缺失值(可选) average_balance <- mean(last_100_entries$balance, na.rm = TRUE)
情况2:计算所有数值列的均值
如果需要批量计算数据框中所有数值类型列的均值,可使用以下方法:
基础R实现
# 遍历每一列,仅对数值列计算均值 numeric_col_means <- sapply(last_100_entries, function(col) { if (is.numeric(col)) mean(col, na.rm = TRUE) else NA })
dplyr包实现(更简洁)
先安装并加载dplyr包,再筛选数值列计算均值:
install.packages("dplyr") # 首次使用需安装 library(dplyr) numeric_col_means <- last_100_entries %>% select_if(is.numeric) %>% colMeans(na.rm = TRUE)
内容的提问来源于stack exchange,提问作者Sidhant Kumar
相关产品推荐
相关产品推荐

