按组每 5 行子集?

Subset every 5 rows by group?

我有一个包含多个组的数据集,我想将组内的行按 5 的倍数进行子集化,并添加第一行(因此每个组中的第 1、5、10、15 等行)。

现在我的数据集有一个名为“Group ID”的列和一些其他列(例如时间、日期等),但没有任何指示任何类型的行号。

如有任何帮助,我们将不胜感激!我在想也许与 dplyr 兼容?我正在尝试使用函数 slice 但到目前为止运气不好。

您需要在每个组中创建序列,然后使用过滤器

library(dplyr)

df <- data.frame(id = c(1, 2, 1, 2, 2, 3, 4, 3, 1, 2, 4, 4, 4, 3, 1, 1, 1, 2, 2),
                 b = c(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6))

df <- df %>% 
  group_by(id) %>% 
  mutate(group_index = row_number()) %>% 
  filter(group_index == 1 | group_index %% 5 == 0)