2017-04-11 3 views
1

는 다음과 같은 예를 생각해 두는dplyr에서 처음으로 NAs를 분류하는 방법은 무엇입니까?

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 

내가 tibbleval에 의해을 정렬 할을 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.

지금까지 발견 된 최고의 해킹은 좋은 오래된 orderslice 결합되어

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 방법은 무엇입니까?

답변

3

우리 수있는 logical 벡터에 arrange 처음

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 
+1

이러한 영리한 아이디어 '발'열 배치하는 배치 - 덕분에 너무 많은 – zlipp

관련 문제