航班数据筛选与排序问题求助:代码异常及排序失效
问题解决方案
1. 修复subset筛选后未按预期排序的问题
你用arr_delay %in% sorted的逻辑有误,%in%仅用于判断元素是否存在于目标向量中,不会保留sorted的排序顺序,最终返回的行还是原数据框delaymorethan2的原有顺序。
直接对筛选后的数据集按arr_delay降序排序即可,推荐两种实现方式:
方式一:用dplyr的arrange(与你之前用的filter同属tidyverse系列,语法更统一)
library(dplyr) delayedtable <- delaymorethan2 %>% arrange(desc(arr_delay))
方式二:用基础R语法排序
delayedtable <- delaymorethan2[order(-delaymorethan2$arr_delay), ]
这里的-表示按列值降序排列,和sort函数的decreasing=TRUE效果一致。
2. 修复order()提示对象未找到的问题
你写的newdata <- delaymorethan2[order(arr_delay),]报错,是因为基础R的order函数默认在全局环境查找变量,但arr_delay是delaymorethan2数据框内的列,并非独立的全局变量。
修正方法有两种:
- 明确指定列所属的数据框:
newdata <- delaymorethan2[order(delaymorethan2$arr_delay), ]
- 用
with()函数将数据框作为临时环境,让order能直接识别列名:
newdata <- with(delaymorethan2, delaymorethan2[order(arr_delay), ])
如果需要降序,可添加-或decreasing=TRUE参数:
# 降序写法1 newdata <- delaymorethan2[order(-delaymorethan2$arr_delay), ] # 降序写法2 newdata <- delaymorethan2[order(delaymorethan2$arr_delay, decreasing=TRUE), ]
额外优化建议
如果习惯用tidyverse语法,可将筛选+排序合并为一行代码,逻辑更清晰且不易出错:
delaymorethan2 <- flights %>% filter(arr_delay >= 2) %>% arrange(desc(arr_delay))
内容的提问来源于stack exchange,提问作者Humberto Hernandez
相关产品推荐
相关产品推荐

