gpt4 book ai didi

r - dplyr排列()函数按缺失值排序

转载 作者:行者123 更新时间:2023-12-02 00:41:43 26 4
gpt4 key购买 nike

我正在尝试研究 Hadley Wickham 的 R for Data Science,但被以下问题绊倒了:“你如何使用arrange() 对所有缺失值进行排序?(提示:使用是.na())" 我正在使用 nycflights13 包中包含的 flights 数据集。鉴于排列()将所有未知值排序到数据框的底部,我不确定如何对所有变量的缺失值执行相反的操作。我意识到这个问题可以用基本 R 代码来回答,但我特别感兴趣的是如何使用 dplyr 以及对arrange() 和 is.na() 函数的调用来完成此操作。谢谢。

最佳答案

我们可以用 desc 包裹它以获取开头的缺失值

flights %>% 
arrange(desc(is.na(dep_time)),
desc(is.na(dep_delay)),
desc(is.na(arr_time)),
desc(is.na(arr_delay)),
desc(is.na(tailnum)),
desc(is.na(air_time)))

NA 值仅在基于的变量中找到

names(flights)[colSums(is.na(flights)) >0]
#[1] "dep_time" "dep_delay" "arr_time" "arr_delay" "tailnum" "air_time"
<小时/>

我们还可以使用 NSE arrange_

,而不是一次传递每个变量名称
nm1 <- paste0("desc(is.na(", names(flights)[colSums(is.na(flights)) >0], "))")

r1 <- flights %>%
arrange_(.dots = nm1)

r1 %>%
head()
#year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum
# <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr>
#1 2013 1 2 NA 1545 NA NA 1910 NA AA 133 <NA>
#2 2013 1 2 NA 1601 NA NA 1735 NA UA 623 <NA>
#3 2013 1 3 NA 857 NA NA 1209 NA UA 714 <NA>
#4 2013 1 3 NA 645 NA NA 952 NA UA 719 <NA>
#5 2013 1 4 NA 845 NA NA 1015 NA 9E 3405 <NA>
#6 2013 1 4 NA 1830 NA NA 2044 NA 9E 3716 <NA>
#Variables not shown: origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
# time_hour <time>.

更新

使用较新版本的 tidyverse(dplyr_0.7.3rlang_0.1.2),我们还可以使用 arrange_atarrange_allarrange_if

nm1 <- names(flights)[colSums(is.na(flights)) >0]
r2 <- flights %>%
arrange_at(vars(nm1), funs(desc(is.na(.))))
<小时/>

或者使用arrange_if

f <- rlang::as_function(~ any(is.na(.)))
r3 <- flights %>%
arrange_if(f, funs(desc(is.na(.))))


identical(r1, r2)
#[1] TRUE

identical(r1, r3)
#[1] TRUE

关于r - dplyr排列()函数按缺失值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37760580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com