如何排序将 NA 放在 dplyr 中的第一位?
How to sort putting NAs first in 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
我想按 val
对 tibble
进行排序,将 NA
放在第一位:
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
被 arrange
放在最后。
到目前为止我发现的最好的技巧是将 slice
与旧的 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
方法是什么?
我们可以先在 logical
向量上 arrange
,然后再排列 'val' 列
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
考虑以下示例:
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
我想按 val
对 tibble
进行排序,将 NA
放在第一位:
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
被 arrange
放在最后。
到目前为止我发现的最好的技巧是将 slice
与旧的 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
方法是什么?
我们可以先在 logical
向量上 arrange
,然后再排列 'val' 列
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