r - 在一系列连续值中查找最后一行

标签 r aggregate data.table

我正在处理一系列 TRUE 和 FALSE 序列,这些序列按组组织并在一段时间内(例如几天)延伸。下面,我花时间重新创建了一个示例并转换了 data.framedata.table使用 data.table包裹。

> dput(df)
structure(list(day = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"), 
    condition = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 
    2L, 1L, 1L, 2L, 2L), .Label = c("FALSE", "TRUE"), class = "factor")), .Names = c("day", 
"group", "condition"), row.names = c(NA, -14L), class = "data.frame")
> library(data.table)
> df <- as.data.table(df)
> setkey(df, group)
> df
    day group condition
 1:   1     a     FALSE
 2:   2     a     FALSE
 3:   3     a      TRUE
 4:   4     a      TRUE
 5:   5     a      TRUE
 6:   6     a     FALSE
 7:   7     a     FALSE
 8:   1     b     FALSE
 9:   2     b      TRUE
10:   3     b      TRUE
11:   4     b     FALSE
12:   5     b     FALSE
13:   6     b      TRUE
14:   7     b      TRUE

使用 data.table ,我知道如何为条件等于“TRUE”的每个组选择第一天:
> df[condition == "TRUE", day[1], by = group]
   group V1
1:     a  3
2:     b  2
> df
    day group condition
 1:   1     a     FALSE
 2:   2     a     FALSE
 3:   3     a      TRUE     <~~~~~~~~
 4:   4     a      TRUE
 5:   5     a      TRUE
 6:   6     a     FALSE
 7:   7     a     FALSE
 8:   1     b     FALSE
 9:   2     b      TRUE     <~~~~~~~~
10:   3     b      TRUE
11:   4     b     FALSE
12:   5     b     FALSE
13:   6     b      TRUE
14:   7     b      TRUE

我想要完成的是一个最终输出,它标识每个组的第一个序列的最后一行,其中条件等于“TRUE”。请在下面查看我的输出:
       group V1
    1:     a  5
    2:     b  3
> df
    day group condition
 1:   1     a     FALSE
 2:   2     a     FALSE
 3:   3     a      TRUE
 4:   4     a      TRUE
 5:   5     a      TRUE     <~~~~~
 6:   6     a     FALSE
 7:   7     a     FALSE
 8:   1     b     FALSE
 9:   2     b      TRUE
10:   3     b      TRUE     <~~~~~
11:   4     b     FALSE
12:   5     b     FALSE
13:   6     b      TRUE
14:   7     b      TRUE

任何意见、建议或其他 Material 将不胜感激。感谢您抽出宝贵时间,随时提出任何澄清问题!

最佳答案

在这里,我们可以查找条件的变化,特别是从 TRUE 到 FALSE 的转换。

a <- df[diff(c(condition,1)) == -1, day[1], by=group]

#    group V1
# 1:     a  5
# 2:     b  3

因此确实假设条件列是一个因子,FALSE 作为第一级。

关于r - 在一系列连续值中查找最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24745639/

相关文章:

javascript - 如何按类型为 bundle 的 itemId 总和数量和类型为 sale_order javascript 的 parentId 进行分组?

reshape 数据表以使列名变为行名

sql-server - SQL Server R Services - 将数据输出到数据库表,性能

r - 使用 data.table 为组的每个元素创建一个 "index"

r - fread 内存使用量远大于文件

persistence - DDD : Persisting aggregates

r - 从给定的稀疏矩阵中提取对角矩阵

c++ - 在 C++17 中具有不可移动类型和保证 RVO 的多个返回值(结构化绑定(bind))

r - 将向量分配给 data.table 列时出现打印错误

r - 在 r data.table 中查找重复组