如何排列NAs首先在dplyr? [英] How to sort putting NAs first in dplyr?

查看:184
本文介绍了如何排列NAs首先在dplyr?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下示例:

require(tibble)
require(dplyr)

set.seed(42)

tbl <- data_frame(id = letters[1:10], val = c(runif(5), NA, runif(4)))

tbl



# A tibble: 10 × 2
      id          val
   <chr>        <dbl>
1      a 0.9148060435
2      b 0.9370754133
3      c 0.2861395348
4      d 0.8304476261
5      e 0.6417455189
6      f           NA
7      g 0.5190959491
8      h 0.7365883146
9      i 0.1346665972
10     j 0.6569922904

I想要通过 val 来排序 tibble ,将 NA s首先:

I want to sort the tibble by val, putting NAs first:

tbl %>%
  arrange(val)



# A tibble: 10 × 2
      id          val
   <chr>        <dbl>
1      i 0.1346665972
2      c 0.2861395348
3      g 0.5190959491
4      e 0.6417455189
5      j 0.6569922904
6      h 0.7365883146
7      d 0.8304476261
8      a 0.9148060435
9      b 0.9370754133
10     f           NA

不幸的是, NA 最后由安排

到目前为止,我发现的最好的黑客是将切片与旧的订单相结合:

The best hack I found so far is combining slice with good old order:

tbl %>%
  slice(order(.$val, na.last = FALSE))



# A tibble: 10 × 2
      id          val
   <chr>        <dbl>
1      f           NA
2      i 0.1346665972
3      c 0.2861395348
4      g 0.5190959491
5      e 0.6417455189
6      j 0.6569922904
7      h 0.7365883146
8      d 0.8304476261
9      a 0.9148060435
10     b 0.9370754133

什么是 dplyr 获得上述结果的方式

What's the dplyr way to get the above result?

推荐答案

code>在逻辑前先安排向量,然后再安排'val'列

We can arrange on the logical vector first before arranging the 'val' column

tbl %>%
   arrange(!is.na(val), val)
# A tibble: 10 × 2
#      id       val
#   <chr>     <dbl>
#1      f        NA
#2      i 0.1346666
#3      c 0.2861395
#4      g 0.5190959
#5      e 0.6417455
#6      j 0.6569923
#7      h 0.7365883
#8      d 0.8304476
#9      a 0.9148060
#10     b 0.9370754

这篇关于如何排列NAs首先在dplyr?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆