gpt4 book ai didi

r - 如何将 NAs 放在 dplyr 中进行排序?

转载 作者:行者123 更新时间:2023-12-01 09:48:32 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to have NA's displayed first using arrange()

(3 个回答)


4年前关闭。




考虑以下示例:

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

我想对 tibble 进行排序来自 val , 放 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 s 由 arrange 排在最后.

迄今为止我发现的最好的 hack 是结合 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获得上述结果的方法?

最佳答案

我们可以arrangelogical在排列 '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

关于r - 如何将 NAs 放在 dplyr 中进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43343590/

25 4 0