【发布时间】:2015-09-07 10:55:46
【问题描述】:
我使用用于飞行运动的数据帧(约 100 万行 * 108 个变量)并希望对满足某个标准(即某个变量的值)的阶段进行分组。为了识别这些组,我想给它们编号。 作为一个 R 新手,我让它适用于我的情况。现在我正在寻找一种更优雅的方式。特别是,我想克服组编号中的“无用”空白。 我提供了一个简化的 dplyr 数据框示例,其阈值标准的值为 THR。行按时间戳排序(因此,我可以在这里截断它)。
THR <- c(13,17,19,22,21,19,17,12,12,17,20,20,20,17,17,13, 20,20,17,13)
df <- as.data.frame(THR)
df <- tbl_df(df)
标记所有符合(不)条件的行
df <- mutate(df, CRIT = THR < 19)
通过以下,我设法有条件地“cumsum”以获得唯一的组标识:
df <- mutate(df, GRP = ifelse(CRIT == 1, 0, cumsum(CRIT))
df
x CRIT GRP
1 13 TRUE 0
2 17 TRUE 0
3 19 FALSE 2
4 22 FALSE 2
5 21 FALSE 2
6 19 FALSE 2
7 17 TRUE 0
8 12 TRUE 0
9 12 TRUE 0
10 17 TRUE 0
11 20 FALSE 6
12 20 FALSE 6
虽然这样做可以解决问题,并且我可以使用 group_by(例如 summarise、filter)对组进行操作,但从示例输出中可以看出,编号并不理想。在本例中,第 1 组编号为 2,第 2 组编号为 6,这与 cumsum() 结果一致。
如果有人能对我有所了解,我将不胜感激。我无法在其他帖子中找到合适的解决方案。
【问题讨论】: