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

Я новичок в R, и у меня проблема.У меня есть фрейм данных CSV с более чем 80000 записей.У меня есть столбец (maj), заполненный 0 и 1, столбец с каждым днем ​​года и столбец с ценой за день (и другие столбцы).Когда maj = 1, это означает, что обновление цены было сделано в тот день.Я хочу сделать следующее: если maj = 0 в течение последних 30 дней, цена должна быть заменена на «N / A»

Вот пример моего df:

      day       maj     price
   2019-01-02    1      1435
   2019-01-03    0      1435
   2019-01-04    0      1435
   2019-01-05    0      1435

Например, если между 2019-01-03 и 2019-02-03 maj = 0, я хочу заменить цену на N / A для 2019-02-04 и все последующие, пока maj = 1 снова.

У меня нет кода для показа, потому что я стер его, когда увидел, что ничего не работает.Я попробовал rollapplyr с пакетом zoo, он создал функцию и значения для прокрутки ежемесячной суммы, но я не понимаю этого.

Кто-нибудь знает, как это сделать?

Спасибо,

1 Ответ

0 голосов
/ 13 апреля 2019

Используя DF, который воспроизводимо показан в примечании, в конце используйте rollapplyr, чтобы вернуть TRUE, если в последние n дней были какие-либо единицы, и FALSE в противном случае. Затем используйте ifelse, чтобы преобразовать TRUE в 1 и FALSE в NA. В вопросе не указывалось, как обрабатывать первые n-1 элементов, но ниже мы заполняем их единицами. (Альтернативы будут fill=NA или partial=TRUE, где эта последняя альтернатива будет применяться к любому количеству элементов, если их меньше, чем n.

library(zoo)

# n <- 30
n <- 3

transform(DF, price = price * ifelse(rollapplyr(maj, n, any, fill = 1), 1, NA))

дает:

         day maj price
1 2019-01-02   1  1435
2 2019-01-03   0  1435
3 2019-01-04   0  1435
4 2019-01-05   0    NA

Примечание

Lines <- "day       maj     price
2019-01-02    1      1435
2019-01-03    0      1435
2019-01-04    0      1435
2019-01-05    0      1435"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)
DF$day <- as.Date(DF$day)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...