按组每 5 行子集?

Posted

技术标签:

【中文标题】按组每 5 行子集?【英文标题】:Subset every 5 rows by group? 【发布时间】:2022-01-01 15:46:33 【问题描述】:

我有一个包含多个组的数据集,并且希望将组中的行沿 5 的倍数划分为子集,并添加第一行(因此每个组中的第 1、5、10、15 行等)。

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

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

【问题讨论】:

如果您可以使用dput(x) 提供示例数据集,将会很有帮助。 【参考方案1】:

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

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)

【讨论】:

以上是关于按组每 5 行子集?的主要内容,如果未能解决你的问题,请参考以下文章

postgres 按行聚合子集

如何将矩阵子集为一列,维护矩阵数据类型,维护行/列名称?

如何将 Pandas DataFrame 的列和行子集转换为 numpy 数组?

找到根据矩阵中特定列中的行之间的绝对差排序的子集

pandas dataframe:如何根据列的值聚合行的子集

除了加载行子集之外,使用 NSFetchedResultsController 有啥好处