R

时间:2017-08-02 23:37:37

标签: r

在R中,我有一个包含两列的数据框:一列用于用户ID,另一列用于登录日期。

每个用户ID在数据框中多次出现,每次都有相应的登录日期。我如何计算连续3天登录的用户?

例如,在下面的数据框中,我们将选择用户1和3。

  • 1 ........ 2017-01-01
  • 2 ........ 2017年1月1日
  • 3 ........ 2017年1月1日
  • 3 ........ 2017年1月2日
  • 1 ........ 2017年1月2日
  • 1 ........ 2017年1月3日
  • 3 ........ 2017年1月3日
  • 2 ........ 2017年1月4日
  • 3 ........ 2017年1月9日
  • 1 ........ 2017年1月12日

1 个答案:

答案 0 :(得分:1)

这是我的解决方案。我创建了一个自定义函数来检查登录列中是否连续三天,然后我在summarize管道中的dplyr中使用它:

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