2017-06-01 7 views
0

Ich habe einen Datensatz von 2 Jahren Benutzer-SMS - 2015 und 2016 (135.000). Ich versuche, neue Benutzer für dieses Programm für Februar 2016 zu identifizieren (basierend auf subscriber_id und entity == "subscribe-online").R Identifizierung neuer Benutzer-IDS basierend auf dem Datum

Die Falte ist, dass ein neuer Benutzer ist einer, wo die Subscriber_id in den Daten innerhalb der letzten 12 Monate nicht aufgetreten ist. So zum Beispiel, wenn ich die folgenden Beispieldaten habe:

created    subscriber_id cellnum entity   message msgtxt 
2015-21-01 14:03:00 15855  7788826943 tip    100  end 
2015-07-12 14:03:00 15839  7788815940 tip    24  tip 24 
2015-08-12 14:03:00 15839  7788815940 stop   99  stop 
2016-01-01 14:05:00 15800  2508816941 tip    25  tip 25 
2016-02-01 16:05:00 15800  2508816941 tip    26  tip 26 
2016-03-01 14:05:00 15800  2508816941 tip    27  tip 27 
2016-01-02 14:03:00 15855  7788826943 subscribe-online 1  msg 1 
2016-01-02 14:03:00 15839  7788815940 subscribe-online 1  msg 1 

15855 und 15839 zeichnen beide am 1. Februar I basierte zuweisen 15855 als neuen Benutzer in die Lage sein wollen, auf der Tatsache, dass das letzte Vorkommen Die Subscriber_ID 15855 war am 21. Januar 2015 - mehr als 12 Monate. Ich möchte 15839 als Wiederholungsbenutzer zuordnen, da das letzte Ereignis am 8. Dezember 2015 war (weniger als 12 Monate).

Das erstellte Feld (Datum) ist im POSIXct-Format. Ich habe versucht, Schleifen zu verstehen und zu lernen, wie ich das hier nutzen könnte. Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

Antwort

0

ist hier eine mögliche Lösung dplyr

library(dplyr) 

df <- data.frame(created = c("2015-21-01 14:03:00","2015-12-07 14:03:00","2015-12-08 14:03:00","2016-01-01 14:05:00","2016-02-01 16:05:00","2016-03-01 14:05:00","2016-01-02 14:03:00","2016-01-02 14:03:00"), 
       subscriber_id = c(15855,15839,15839,15800,15800,15800,15855,15839), 
       cellnum = c(7788826943,7788815940,7788815940,2508816941,2508816941,2508816941,7788826943,7788815940), 
       entity = c("tip","tip","stop","tip","tip","tip","subscribe-online","subscribe-online"), 
       message = c("100","24","99","25","26","27","1","1"), 
       msgtxt = c("end","tip 24","stop","tip 25 ","tip 26 ","tip 27 ","msg 1","msg 1"), 
       stringsAsFactors = FALSE 
       ) 

df$created <- as.POSIXct(df$created, format = "%Y-%d-%m %H:%M:%S") 


df <- df %>% 
     arrange(subscriber_id, created) %>% 
     group_by(subscriber_id) %>% 
     mutate(new_user = if_else(entity != "subscribe-online", NA, if_else(as.numeric(difftime(created, lag(created), units = "days") > 365) == TRUE, TRUE, NA))) 
mit
Verwandte Themen