2017-08-02 4 views
0

Rでは、ユーザーIDとログイン日の2つの列を持つデータフレームがあります。Rの連続したタイムスタンプR

各ユーザIDは、データフレームに複数回表示され、そのたびに対応するログイン日付が表示されます。 3日間連続してどのユーザがログインしたかをどのように計算できますか?

例えば、以下のデータフレームでは、ユーザ1を選択すると3

  • 1 ........ 2017年1月1日
  • 2 ...... ..2017-01-01
  • 3 ........ 2017年1月1日
  • 3 ........ 2017年1月2日
  • 1 ..... ... 2017-01-02
  • 1 ........ 2017-01-03
  • 3 ........ 2017-01-03
  • 2 ........ 2017-01-04
  • 3 ........ 2017-01-09
  • 1 ........ 2017-01-12
+0

あなたがこれまでに試してみましたか? – lebelinoz

答えて

1

私の解答です。私は3日連続ログインの列にあるかどうかを確認するためにカスタム関数を作成し、私はdplyrパイプラインでsummarizeでそれを使用します。

user <- c(1, 2, 3, 3, 1, 1, 3, 2, 3, 1) 
login <- c('2017-01-01', '2017-01-01', '2017-01-01', '2017-01-02', '2017-01-02', '2017-01-03', '2017-01-03', '2017-01-04', '2017-01-09', '2017-01-12') 

df <- data_frame(user, login) 

three_consecutive_days <- function(x) { 
    x <- sort(date(x)) 
    if(length(x) >= 3) { 
    for(i in 1:(length(x) - 2)) { 
     if(ymd(x[i]) + ddays(2) == ymd(x[i + 2])) {print('found a true'); return(TRUE) } 
    } 
    } 
    return(FALSE) 
} 

df %>% 
    group_by(user) %>% 
    summarise(three_consecutive_days = three_consecutive_days(login)) %>% 
    filter(three_consecutive_days == TRUE) 

## user three_consecutive_days 
## <dbl>     <lgl> 
## 1  1     TRUE 
## 2  3     TRUE 
関連する問題