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)
如果我需要过滤最中间的行怎么办?
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
您也可以使用slice
而不是row_number()
,并使用n()
来捕获每个组的长度。将其除以2,以获取每个组的中间值。
library(dplyr)
df %>%
group_by(id) %>%
slice(ceiling(n()/2))