You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

航班数据筛选与排序问题求助:代码异常及排序失效

问题解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:52:06