在nycflights13中计算air_time均值时遇‘对象不存在’错误求助
嗨,我来帮你搞定这个问题!
你遇到的错误核心是用错了函数:select()的作用是选择数据框里的列,它只认列名(或者列的位置、starts_with这类选择助手),根本不支持像mean(air_time)这样的聚合计算。当你在select()里写mean(air_time)时,R会误以为你要找一个叫mean(air_time)的列——当然找不到,所以才会报air_time不存在的错(其实不是air_time找不到,是你的用法完全错了)。
正确的做法:用summarize()计算聚合均值
如果你想计算出发地为EWR、JFK、LGA的航班的air_time均值,需要先筛选出符合条件的航班,再用summarize()(或者英式拼写summarise())来计算聚合值,还要记得处理缺失值(air_time里有NA,不加na.rm=TRUE的话结果会是NA):
flights %>% # 筛选出发地是EWR/JFK/LGA的航班 filter(origin %in% c("EWR", "JFK", "LGA")) %>% # 计算air_time的均值,命名为avg_air_time summarize(avg_air_time = mean(air_time, na.rm = TRUE))
为什么之前的select(air_time)能正常运行?
select(air_time)是直接指定要选择air_time这一列,这时候air_time作为列名被dplyr正确识别,所以没问题。但select(mean(air_time))是让select()去解析一个计算表达式,这时候mean()会先试图调用,但air_time只存在于flights数据框里,不在当前的全局环境,自然就报错了。
另外两种可选写法(供参考)
如果你只是想快速得到均值,也可以用pull()把air_time列提取成向量再计算:
flights %>% filter(origin %in% c("EWR", "JFK", "LGA")) %>% pull(air_time) %>% mean(na.rm = TRUE)
要是你想给原数据框新增一列均值(比如每条航班都显示整体均值),可以用mutate():
flights %>% filter(origin %in% c("EWR", "JFK", "LGA")) %>% mutate(avg_air_time = mean(air_time, na.rm = TRUE))
内容的提问来源于stack exchange,提问作者States
相关产品推荐
相关产品推荐

