在flights中,#按dest分组,考虑arr_delay列,去除两列中NA值。将dest按字母顺序,由小至大。新增列rank1,为数据表该行在对应的dest小组中的rank(针对arr_delay列,不用summarise做),新增列rank2,为数据表该行在对应的dest小组中的rank逆排序rank(desc), 新增列diff,为逻辑变量如果rank1>rank2结果为true,否则false。最终结果4列。dest,rank1,rank2,diff。注意题目说rank就用rank命令,如说min_rank就用min_rank命令
时间: 2023-12-03 20:42:14 浏览: 153
以下是可以实现这个功能的代码:
```{r}
library(dplyr)
flights %>%
filter(!is.na(arr_delay)) %>% # 去除NA值
group_by(dest) %>%
arrange(dest, arr_delay) %>% # 按字母顺序,arr_delay升序排序
mutate(rank1 = rank(arr_delay), # 计算rank1
rank2 = rank(desc(arr_delay)), # 计算rank2
diff = rank1 > rank2) %>% # 计算diff
select(dest, rank1, rank2, diff) # 选择需要的列
```
解释一下代码:
首先用`filter()`函数去除了`arr_delay`列中的NA值。然后用`group_by(dest)`函数按`dest`列进行分组。接着用`arrange(dest, arr_delay)`函数按字母顺序和`arr_delay`升序排序。然后用`mutate()`函数新增了三列,分别是`rank1`、`rank2`和`diff`。其中`rank1`是`arr_delay`列在对应的`dest`小组中的排名,使用`rank()`函数计算。`rank2`是`arr_delay`列在对应的`dest`小组中的逆序排名,使用`rank(desc(arr_delay))`函数计算。`diff`是逻辑变量,如果`rank1`大于`rank2`则为TRUE,否则为FALSE。最后用`select()`函数选择需要的列,包括`dest`、`rank1`、`rank2`和`diff`。
阅读全文