在R中,我有一个包含两列的数据框:一列用于用户ID,另一列用于登录日期。
每个用户ID在数据框中多次出现,每次都有相应的登录日期。我如何计算连续3天登录的用户?
例如,在下面的数据框中,我们将选择用户1和3。
答案 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