如何在dplyr中将NAs排在第一位?

时间:2017-04-11 10:37:59

标签: r sorting dplyr na

考虑以下示例:

# 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

不幸的是,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

获得上述结果的<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">` 方式是什么?

1 个答案:

答案 0 :(得分:5)

我们可以先arrangelogical向量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 安排&#39; val&#39;柱

SELECT 
row_number () over() row_number,
fullvisitorID,
visitnumber,
FROM (
SELECT fullvisitorID, visitnumber, 
FROM [data]
GROUP BY fullvisitorID,visitnumber
ORDER BY visitnumber DESC
)