我想这可能是一个相当简单的问题,但如何做到这一点(基础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中的行顺序是相关的。
答案 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')