2016-10-21 2 views
2

내 데이터는 다음과 같습니다팝 아웃 관찰/행

library(tidyverse) 

set.seed(1) 
df <- tibble(
    id = c("cat", "cat", "mouse", "dog", "fish", "fish", "fish"), 
    value = rnorm(7, 100, sd = 50) 
) 

을 나는 새로운 데이터 프레임에 이동 물고기로, fish의 최고 값을 "튀어"동시에 제거하는 방법 그것은 현재 데이터 프레임에서?

이 (그러나 그것은 모든 우아한을하지 않는 것) 작품 :

df_store <- df %>% 
    filter(id == "fish") %>% 
    top_n(1) 

df <- anti_join(df, df_store) 

더 좋은 방법이 있나요?

+1

참고로, 기본 R, 당신이 사용하는'split'을 할 수 split (df, id == "fish"& value == max (value [id == "fish"]))))를 사용하여'data.frame'의'list ' –

답변

1

pipeR 패키지를 사용하면 한 줄로 두 작업을 모두 수행 할 수 있습니다.

library(pipeR); library(dplyr) 
df <- df %>>% filter(id == "fish") %>>% top_n(1) %>>% (~ df2) %>% anti_join(df, .) 
print(df2) 
#### 1 fish 124.3715 
print(df) 
#### 1 mouse 58.21857 
#### 2 dog 179.76404 
#### 3 fish 58.97658 
#### 4 cat 68.67731 
#### 5 cat 109.18217 
#### 6 fish 116.47539 

나는 그래서 당신은 파이프 내에서 할당이 종류가 실제로 어떻게 작동하는지, here 그것을 확인할 수 있습니다 pipeR의 전문가는 아니지만.

그냥 한 발언 : top_n를 사용할 때 내가 그것을 마지막 열입니다하지만 당신은 쉽게 잊을 수 기본적으로 값 열을 지정하는 것이 좋습니다 : top_n(1, value)