2017-02-25 1 views
1

내가이 오히려 간단한 질문 수 있습니다 생각하지만,이 (기본 연구) 수행하는 방법 : 관용적 dplyr 용어로dplyr 필터 일치 방법은 무엇입니까?

df <- data.frame(x=10:1,y=(1:10)^2) 
df[match(c(3,5,7), df$x),] 

을 :

tb <- dplyr::as.tbl(df) 
dplyr::filter(tb, ???) 

또는, 즉, 무엇을 가야한다 ???에 입력하여 첫 번째 스 니펫과 기능적으로 동일하게 만드시겠습니까? 결과 데이터 프레임/행의 행 순서는 관련이 있습니다.

+0

@RichScriven : 아니, C '의 순서 (3,5,7) '결과 tibble에서 보존되지 않습니다. – plant

+0

K 그러면 대신'slice'를 사용하십시오. 'dplyr :: slice (df, match (c (3, 5, 7), x))' –

+0

@RichScriven : 고마워! – plant

답변

4

@RichScriven에서 제안한대로 dplyr::filter 대신 dplyr::slice(df, match(c(3, 5, 7), x))을 사용하십시오.

1

뿐만 filter 사용 :

df %>% 
    filter(x %in% c(3, 5, 7)) %>% 
    group_by(x) %>% 
    slice(1) 

출력 :

x y 
1 7 16 
2 5 36 
3 3 64 

sqldf 포장

library(sqldf) 
sqldf('SELECT * 
     FROM df 
     WHERE x IN (3, 5, 7) 
     GROUP BY x 
     LIMIT 3') 
관련 문제