R中使用group_by计算列月度平均值返回NA问题的解决方法问询
问题解决方法
核心问题大概率由缺失值参数缺失、依赖包未加载、时间列类型异常三类原因导致,可按以下步骤修复:
步骤1:确认依赖包已加载
floor_date是lubridate包的专属函数,group_by/summarize来自dplyr,运行代码前先完成包加载:
# 未安装的话先执行 install.packages(c("dplyr","lubridate")) library(dplyr) library(lubridate)
步骤2:给mean函数添加缺失值忽略参数
R的mean()函数默认遇到缺失值就返回NA,只要你的USDTRY列存在任意一个缺失值,整组聚合结果就会变为NA,添加na.rm = TRUE参数即可解决:
data %>% group_by(month = floor_date(Timestamp, unit = "month")) %>% summarize(USDTRY = mean(USDTRY, na.rm = TRUE)) -> data1
步骤3:批量计算所有列的月度平均(可选优化)
如果需要对所有数值列计算月度平均,不用逐个列写规则,直接用across批量处理即可:
data %>% group_by(month = floor_date(Timestamp, "month")) %>% # 对所有数值列计算均值,自动忽略缺失值 summarize(across(where(is.numeric), ~mean(.x, na.rm = TRUE))) -> data1
异常排查补充
如果修改后仍有问题,先执行以下代码检查基础数据是否正常:
# 检查Timestamp列类型是否为POSIXct/POSIXt,若不是先转格式 class(data$Timestamp) # 如果是字符类型,执行转换: # data$Timestamp <- as.POSIXct(data$Timestamp, tz = "UTC") # 检查USDTRY列的缺失值数量 sum(is.na(data$USDTRY))
另外你提到的dput输出中Timestamp为数值的情况属于正常现象:POSIXct类型的时间本质就是存储为1970年1月1日以来的秒数,View时自动格式化显示为日期是R的默认渲染逻辑,不影响计算。
内容的提问来源于stack exchange,提问作者SBA
相关产品推荐
相关产品推荐

