每个组筛选中间行

8
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)

如果我需要过滤最中间的行怎么办?

对于每个ID,我想选择中间行。这就是为什么我要对其进行分组的原因。 - 89_Simple
2个回答

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

4

您也可以使用slice而不是row_number(),并使用n()来捕获每个组的长度。将其除以2,以获取每个组的中间值。

library(dplyr)

df %>% 
 group_by(id) %>% 
 slice(ceiling(n()/2))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接