Функция getanID не присваивает правильные значения группам в R - PullRequest
1 голос
/ 17 марта 2019

У меня есть следующий фрейм данных

dd <- data.frame(
       date = c("2018-03-04", "2018-03-05", "2018-03-06", "2018-03-07", "2018-03-09", 
                "2018-03-11", "2018-03-15", "2018-03-16", "2018-03-17"),
       day_after_rainfall = c(1,2,3,4,1,1,1,2,3)
                 )

Я хотел бы назначить идентификаторы для каждой строки на основе day_after_rainfall - если идет непрерывный дождь в течение нескольких дней, этим дням должен быть присвоен один и тот же идентификатор.

Идеальный результат:

         date day_after_rainfall .id
1: 2018-03-04                  1   1
2: 2018-03-05                  2   1
3: 2018-03-06                  3   1
4: 2018-03-07                  4   1
5: 2018-03-09                  1   2
6: 2018-03-11                  1   3
7: 2018-03-15                  1   4
8: 2018-03-16                  2   4
9: 2018-03-17                  3   4

Я использовал следующий код

library(splitstackshape)
dd <- getanID(dd, id.vars = "day_after_rainfall")

Я получил

         date day_after_rainfall .id
1: 2018-03-04                  1   1
2: 2018-03-05                  2   1
3: 2018-03-06                  3   1
4: 2018-03-07                  4   1
5: 2018-03-09                  1   2
6: 2018-03-11                  1   3
7: 2018-03-15                  1   4
8: 2018-03-16                  2   2
9: 2018-03-17                  3   2

Последние две строки сделалине получить правильные идентификаторы.Почему и как это исправить?

1 Ответ

3 голосов
/ 17 марта 2019

Вы можете использовать cumsum функцию:

dd$id <- cumsum(dd$day_after_rainfall==1)

print(dd)
#         date day_after_rainfall id
# 1 2018-03-04                  1  1
# 2 2018-03-05                  2  1
# 3 2018-03-06                  3  1
# 4 2018-03-07                  4  1
# 5 2018-03-09                  1  2
# 6 2018-03-11                  1  3
# 7 2018-03-15                  1  4
# 8 2018-03-16                  2  4
# 9 2018-03-17                  3  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...