T. *_*oss 11 sorting r na dplyr
我正在尝试通过Hadley Wickham的R for Data Science工作,并且已经惹恼了以下问题:"你怎么能使用arrange()对所有缺失的值进行排序?(提示:使用is.na())"我正在使用nycflights13包中包含的航班数据集.鉴于arrange()将所有未知值排序到数据框的底部,我不确定如何在所有变量的缺失值中执行相反的操作.我意识到这个问题可以用基本的R代码来回答,但我特别感兴趣的是如何使用dplyr以及对arrange()和is.na()函数的调用来完成.谢谢.
akr*_*run 10
我们可以将其包装起来以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)))
Run Code Online (Sandbox Code Playgroud)
NA值仅在基于的那些变量中找到
names(flights)[colSums(is.na(flights)) >0]
#[1] "dep_time" "dep_delay" "arr_time" "arr_delay" "tailnum" "air_time"
Run Code Online (Sandbox Code Playgroud)
我们也可以使用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>.
Run Code Online (Sandbox Code Playgroud)
随着tidyverse(较新版本dplyr_0.7.3
,rlang_0.1.2
),我们也可以利用arrange_at
,arrange_all
,arrange_if
nm1 <- names(flights)[colSums(is.na(flights)) >0]
r2 <- flights %>%
arrange_at(vars(nm1), funs(desc(is.na(.))))
Run Code Online (Sandbox Code Playgroud)
或者使用 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
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试最简单的方法,他刚刚向您展示了:
arrange(flights, desc(is.na(dep_time)))
Run Code Online (Sandbox Code Playgroud)
其他不错的快捷方式:
arrange(flights, !is.na(dep_time))
Run Code Online (Sandbox Code Playgroud)
或者
arrange(flights, -is.na(dep_time))
Run Code Online (Sandbox Code Playgroud)