df <- data.frame(id=c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
x=c(1,2,3,3,5,1,4,3,1,2,8,9,3,1,0))
对于每个组,如果我想过滤第一行
df %>%
group_by(id) %>%
filter(row_number()==1)
如果我必须过滤最中间一行,我该怎么办?
答案 0 :(得分:9)
n()/2
将组的nrow
减半,ceiling
将奇数值的小数舍入。
df %>%
group_by(id) %>%
filter(row_number()==ceiling(n()/2))
# A tibble: 3 x 2
# Groups: id [3]
id x
<dbl> <dbl>
1 1 3
2 2 3
3 3 3
答案 1 :(得分:4)
您也可以使用slice
而不是row_number()
,并使用n()
来捕获每个组的长度。除以2得到每组的中间值。
library(dplyr)
df %>%
group_by(id) %>%
slice(ceiling(n()/2))