我正在处理一系列 TRUE 和 FALSE 序列,这些序列按组组织并在一段时间内(例如几天)延伸。下面,我花时间重新创建了一个示例并转换了 data.frame
成data.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/