Это продолжение до этой темы .Как и там, мне нужно определить идентификатор типа длины строки столбца группы (игнорируя NA
), с дополнительным столбцом seq_break
, указывающим, что последовательность должна быть завершена, пока seq_break = TRUE
.Однако решение, предоставленное в этом разделе, начинает новую последовательность в строке, где seq_break = TRUE
, тогда как на самом деле его следует включить в качестве последнего события предыдущей последовательности.Пример данных прилагается ниже.Разницу можно наблюдать в строке 46
- предыдущее решение будет начинать элемент последовательности 13
здесь, в то время как мне нужно, чтобы он был включен в последовательность 12
.
df <- structure(list(group = c(NA, NA, "home", "home", "home", "home",
"home", "home", "away", NA, NA, "home", "home", "home", NA, NA,
NA, "home", "away", "away", NA, "away", "away", "away", "home",
"away", "away", "away", NA, "home", "home", NA, NA, "away", NA,
NA, "home", NA, NA, "home", "home", "home", "home", "home", "home",
"home", "away", "away", NA, NA), seq_break = c(FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE,
TRUE), expected_output = c(NA, NA, 1, 1, 1, 1, 1, 1, 2, NA, NA,
3, 3, 3, NA, NA, NA, 4, 5, 5, NA, 6, 6, 6, 7, 8, 8, 8, NA, 9,
9, NA, NA, 10, NA, NA, 11, NA, NA, 12, 12, 12, 12, 12, 12, 12,
13, 13, NA, NA)), .Names = c("group", "seq_break", "expected_output"
), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-50L))
Любые идеи, как выполнитьчто с tidyverse
?Я не могу понять, как cumsum
можно заменить здесь ...