如何进行dplyr过滤匹配?

时间:2017-02-25 16:43:23

标签: r dplyr

我想这可能是一个相当简单的问题,但如何做到这一点(基础R):

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

用惯用的dplyr说法:

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

或换句话说,应该进入???以使其在功能上等同于第一个片段?请注意,结果dataframe / tibble中的行顺序是相关的。

2 个答案:

答案 0 :(得分:4)

根据@RichScriven的建议:使用dplyr::filter代替semi-colon

答案 1 :(得分: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')