Присвоение значений в непрерывной последовательности в зависимости от второго столбца - PullRequest
0 голосов
/ 12 февраля 2019

Я бы хотел назначить последовательность столбцу значений ИСТИНА или ЛОЖЬ, причем последовательность содержит одно и то же значение ИСТИНЫ после одного ИЛИ нескольких последовательных значений ЛОЖЬ.

то есть то, что я пытаюсь повторить, это;

df <- data.frame(
new_activity = as.character(c("TRUE","TRUE","TRUE","FALSE","TRUE","TRUE","TRUE","TRUE","TRUE","TRUE",
              "TRUE","TRUE","TRUE","TRUE","FALSE","FALSE","TRUE","TRUE","FALSE","TRUE")),
sequence = as.numeric(c(1,2,3,4,4,5,6,7,8,9,10,11,12,13,14,14,14,15,16,16)))

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Преобразуйте ваш столбец в тип logical, сначала используйте cumsum, а затем добавьте отрицание входного вектора, чтобы получить желаемый результат

x <- as.logical(df$new_activity)
cumsum(x) + !x
# [1]  1  2  3  4  4  5  6  7  8  9 10 11 12 13 14 14 14 15 16 16
0 голосов
/ 12 февраля 2019

Один из вариантов - преобразовать 'new_activity' в logical, поместить его в i, создать столбец sequence1 в качестве последовательности строк, а затем дополнить NAs na.locf

library(zoo)
library(data.table)
setDT(df)[as.logical(new_activity), sequence1 := seq_len(.N)
       ][, sequence1 := na.locf(sequence1, fromLast = TRUE)]
df
#    new_activity sequence sequence1
# 1:         TRUE        1         1
# 2:         TRUE        2         2
# 3:         TRUE        3         3
# 4:        FALSE        4         4
# 5:         TRUE        4         4
# 6:         TRUE        5         5
# 7:         TRUE        6         6
# 8:         TRUE        7         7
# 9:         TRUE        8         8
#10:         TRUE        9         9
#11:         TRUE       10        10
#12:         TRUE       11        11
#13:         TRUE       12        12
#14:         TRUE       13        13
#15:        FALSE       14        14
#16:        FALSE       14        14
#17:         TRUE       14        14
#18:         TRUE       15        15
#19:        FALSE       16        16
#20:         TRUE       16        16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...