Создать новый столбец на основе условия, существующего в дате перехода
Чтобы сделать этот вопрос более обобщенным, я считаю, что его также можно перефразировать следующим образом:Создание скользящей временной чувствительной переменной фактора, Хотя это необычное требование, его можно использовать для множества различных источников данных.
У меня есть серияnon-uniform time data
с> 1 записью в день для тысяч пользователей. Я хочу создать новый столбецplayer_type
это отслеживает скользящее 30-дневное определение их поведения. Поведение определяется тем, в какие игры они играют; колонка'games'
является фактором gameA, gameB.
Таким образом, существует три типа поведения:
Эксклюзивно играет в GameA -'A'
Эксклюзивно играет в GameB -'B'
Играет в обе игры -'Hybrid'
Я хочу использовать этот новый столбец, чтобы увидеть изменения их игрового поведения с течением времени, а также подсчитать количество игроков в каждой группе за все время, чтобы увидеть, как они меняются.
Временные ряды крайне нерегулярны для каждого игрока. Игроки могут играть в различные типы игр в день или не играть в какие-либо игры в течение многих месяцев. Временные ряды нерегулярны для каждого игрока, поэтому запись создается только тогда, когда игрок играет в игру, поэтому я ожидаю, что решение может использовать фильтр, подобный следующему:
interval(current_date, current_date - new_period(days=30)
(с использованием lubridate).
Вот пример набора данных. Имейте в виду, что он упрощен и тестирует смену за 1 день, поэтому простые методы, проверяющие запись раньше, на самом деле не будут работать. Если вы можете сделать лучший набор данных, пожалуйста, сообщите, и я отредактирую этот пост.
p <- c( 1, 1, 1, 2, 2, 2, 6, 6, 6)
g <- c('A', 'B', 'B', 'A', 'B', 'A', 'A', 'B', 'B')
d <- seq(as.Date('2014-10-01'), as.Date('2014-10-9'), by=1)
df <- data.frame(player_id = p, date = d, games = g)
В качестве вывода мне требуется:
player_id date games type
1 1 2014-10-01 A A (OR NA)
2 1 2014-10-02 B Hybrid
3 1 2014-10-03 B B
4 2 2014-10-04 A A (OR NA)
5 2 2014-10-05 B Hybrid
6 2 2014-10-06 A Hybrid
7 6 2014-10-07 A A (OR NA)
8 6 2014-10-08 B Hybrid
9 6 2014-10-09 B B
Решение должно быть что-то вродеapply
через столбцы, и применить функцию, которая проверяет обратно 30 дней во времени, иifelse()
Заявление, чтобы увидеть, в какие игры они играли.
Это очень похожий пост - и должен помочь решить эту проблему.Как сделать условную сумму, которая выглядит только между определенными критериями даты
Я также исследовал,rowwise()
и условноmutates()
используя dplyr, однако улов для меня является историческим компонентом времени.
Спасибо за помощь! Я не могу поблагодарить этот форум достаточно. Я буду проверять часто.