Групповая переменная, которая идентифицирует наблюдения между двумя значениями - PullRequest
0 голосов
/ 17 марта 2020

Вероятно, это простой вопрос, и я не знаю, какой термин мне нужно искать, но я еще ничего не нашел.

У меня есть data.table (я привык к этому) или data.frame, как это:

a = rep(1, 8)
b = rep(c("20","30", "180", "10"), each = 1)
df = data.table(a,b)

df

  a   b
1 1  20
2 1  30
3 1 180
4 1  10
5 1  20
6 1  30
7 1 180
8 1  10

Я хочу получить переменную, которая идентифицирует группу наблюдений, которые появляются между первым и последним наблюдением со значением b выше или равным 180. Например:

  a   b  c
1 1  20  1
2 1  30  1
3 1 180  2
4 1  10  2
5 1  20  2
6 1  30  2
7 1 180  3
8 1  10  3

Любая помощь будет очень полезной! Если где-то есть такой вопрос, я буду признателен, если вы скажете, что мне нужно посмотреть.

Заранее спасибо:)

1 Ответ

1 голос
/ 17 марта 2020

Мы можем использовать cumsum после изменения класса столбца.

library(data.table)

df <- type.convert(df)
setDT(df)

df[, c := cumsum(b >= 180) + 1]


#   a   b c
#1: 1  20 1
#2: 1  30 1
#3: 1 180 2
#4: 1  10 2
#5: 1  20 2
#6: 1  30 2
#7: 1 180 3
#8: 1  10 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...