2017-06-01 7 views
0

私は2015年と2016年(135,000)の2年間のユーザーテキストメッセージのデータセットを持っています。 2016年2月にこのプログラムの新規ユーザーを特定しようとしています(subscriber_idとentity == "subscribe-online"に基づいています)。日付に基づいて新しいユーザーIDを特定するR

新しいユーザーは、過去12か月以内にsubscriber_idがデータ内で発生しなかったということです。私はの最後に出現するという事実に基づいて、新しいユーザーとして15855を割り当てることができるようにしたい

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と15839の両方2月1日にサブスクライブ:私は、次のサンプルデータを持っているのであれば、例えば、 subscriber_id 15855は2015年1月21日 - 12ヶ月以上経過しています。私は最後の出現が2015年12月8日(12ヶ月未満)だったので、15839をリピートユーザーとして割り当てたいと思います。

作成された(日付)フィールドは、POSIXct形式です。私はループを理解しようとしていました。どんな助けでも大歓迎です。ありがとう。ここで

答えて

0

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))) 
をdplyr使用して潜在的な解決策であります
関連する問題