【发布时间】:2018-09-12 13:15:02
【问题描述】:
我有如下数据:
library(dplyr)
ex <- data.frame(bool = c(rep(FALSE, 2), rep(TRUE, 3), rep(FALSE, 2), rep(TRUE, 5),
FALSE, FALSE, rep(TRUE, 6), FALSE, FALSE, FALSE)) %>%
mutate(seq = data.table::rleid(bool)) %>%
group_by(seq) %>%
mutate(n = n()) %>%
ungroup() %>%
mutate(expected_output = c(4, 4, NA, NA, NA, 4, 4, rep(NA,5), 4, 4, rep(NA, 6), rep(6, 3)))
对于每个FALSE,我需要找到长度至少为4 的TRUE 的最新序列。但是如果之前没有这样的序列(比如行1:2或6:7),我们应该向前检查,即找到观察后出现的第一个长度为4或更多的序列。
ex 的最后一列包含预期的输出。我该怎么做(最好使用tidyverse)?
编辑
仍然非常感谢使用tidyverse 的解决方案。
【问题讨论】:
-
如果没有直接前后的序列。你应该先看哪里?在前面或后面。最近的?如果 font 和 behind 是相同的 dist appart 怎么办?
-
expected_output列中的 4 和 6 指的是什么? -
@denis,来自
seq列的序列号 -
行
10:11旁边应该是什么?4或5???data.frame(bool = c(rep(TRUE, 4), rep(FALSE, 2), rep(TRUE, 3), rep(FALSE, 2), rep(TRUE, 5), FALSE, FALSE, rep(TRUE, 6), FALSE, FALSE, FALSE)) -
@jakes。我和 Aarons 的解决方案适用于新数据。你哪里有问题?错误/错误结果是什么?