Как присвоить первому значению каждой группы значение «1», а остальное «0» в R-кадре данных - PullRequest
0 голосов
/ 30 декабря 2018

Бизнес-контекст:

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

Я пришел к кадру данных, как показано ниже,

"customerID Couponid CouponExpiryDate RetailstoreID   Visitdate campaignresponse
AA1          111        01-10-18       B3B12           01-01-18         1     
AA1          111        01-10-18       B3B12           01-02-18         1
AA2          111        01-10-18       B3B51           01-25-18         0
AA3          121        01-25-18       B54D3           01-14-18         1
AA1          111        01-10-18       B3B12           01-11-18         0   
AA4          115        01-15-18       B3B12           01-01-18         1     
AA3          111        01-25-18       B54D3           01-23-18         1
......     

Проблема:

Я использовал простой оператор mutate для вычисления последнего столбца "Campaignresponse"

Предположим, OrderDate =" 12-31-17 "

df<-df%>%mutate(campaignresponse = Visitdate >=OrderDate & (Visitdate <=CouponExpiryDate ))%>%replace_na(list((campaignresponse =0))

Если вы посмотрите на вышеупомянутый фрейм данных, особенно строка №: 2 и строка №: 7, он показывает« 1 »но я хочу, чтобы это было "0".Потому что в моем случае клиент может ответить на купонную кампанию только один раз, и если дата посещения предшествует дате истечения срока, она должна быть 1. Но есть некоторые клиенты, которые посетили магазин дважды или более в течение периода кампании, и мой код вычисляетим нужно ответить на кампанию, и ей присваивается значение «1», но это неправильно.

В идеале я хочу что-то вроде ниже,

customerID Couponid CouponExpiryDate RetailstoreID   Visitdate campaignresponse
AA1          111        01-10-18       B3B12           01-01-18         1     
AA1          111        01-10-18       B3B12           01-02-18         0
AA2          111        01-10-18       B3B51           01-25-18         0
AA3          121        01-25-18       B54D3           01-14-18         1
AA1          111        01-10-18       B3B12           01-11-18         0   
AA4          115        01-15-18       B3B12           01-01-18         1     
AA3          121        01-25-18       B54D3           01-23-18         0
...... 

Может кто-нибудь помочь мне с этим?

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

1 Ответ

0 голосов
/ 30 декабря 2018
df<-df %>% group_by(customerID, Couponid) %>% 
 dplyr::mutate(campaignresponse = as.integer(Visitdate >=OrderDate & (Visitdate <=CouponExpiryDate ) & row_number()==1))

Вы хотите добавить условие, что строка является первой из всех строк с одинаковым идентификатором клиента и идентификатором купона (это предполагает, что данные уже отсортированы по дате - если нет, добавьте строкуrange ()),

Результат:

# A tibble: 7 x 6
# Groups:   customerID, Couponid [5]
  customerID Couponid CouponExpiryDate RetailstoreID Visitdate  campaignresponse
  <fct>         <int> <date>           <fct>         <date>                <int>
1 AA1             111 2018-01-10       B3B12         2018-01-01                1
2 AA1             111 2018-01-10       B3B12         2018-01-02                0
3 AA2             111 2018-01-10       B3B51         2018-01-25                0
4 AA3             121 2018-01-25       B54D3         2018-01-14                1
5 AA1             111 2018-01-10       B3B12         2018-01-11                0
6 AA4             115 2018-01-15       B3B12         2018-01-01                1
7 AA3             111 2018-01-25       B54D3         2018-01-23                1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...