折叠并计算唯一值的数量

Collapse and count the number of unique value

我是 R 的新手,我目前正在开发一个应用程序,其中的数据框如下所示:

Database
UserId         Hour         Date
01                18           01.01.2016
01                18           01.01.2016
01                14           02.01.2016
01                14           02.01.2016
02                21           02.01.2016
02                08           05.01.2016
02                08           05.01.2016
03                23           05.01.2016

每一行代表一个会话。

我需要确定用户第一次会话的时间是否会影响该用户将要进行的会话数。

我试过命令 summaryBy:

library(doBy)
first_hour <- summaryBy(UserId + Hour + Date ~ UserId, 
    FUN=c(head, length, unique), database)

但它没有给我正确的结果。

我的目标是确定用户进行的第一个会话的 Hour,确定用户有多少个会话以及多少个不同的会话日期。

如果有人可以帮助解决这个问题,那就太棒了!

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'UserId'分组,我们order得到'Date',得到first'Hour'、会话总数 (.N) 和 unique 日期元素的数量 (uniqueN(Date))。

library(data.table)
setDT(df1)[order(UserId, as.Date(Date, "%m.%d.%Y")),.(Hour = Hour[1L],
      Sessions = .N, DifferSessionDate = uniqueN(Date)) , by = UserId]
#    UserId Hour Sessions DifferSessionDate
#1:      1   18        4                 2
#2:      2   21        3                 2
#3:      3   23        1                 1

您也可以使用 dplyr:

library(dplyr)
dt %>% group_by(UserId) %>% summarise(FirstHour = min(Hour),
                                      NumSessions = n(),
                                      NumDates = length(unique(Date)))

Source: local data frame [3 x 4]

  UserId FirstHour NumSessions NumDates
   (int)     (int)       (int)    (int)
1      1        14           4        2
2      2         8           3        2
3      3        23           1        1

使用base命令,您可以编写自己的函数来select需要的信息:

user.info <- function(user){
    temp <- subset(Database, Database$UserId == user)
    return(c(UserId=user, FirstHour=temp$Hour[1], Sessions=nrow(temp), Dates=length(unique(temp$Date))))
}

t(sapply(unique(Database$UserId), FUN=user.info)) 
#     UserId FirstHour Sessions Dates
# [1,]      1        18        4     2
# [2,]      2        21        3     2
# [3,]      3        23        1     1

此处,FirstHour 是给定用户在第一个列出行上的小时,Sessions 是用户的行数,Dates 是不同日期的数量为用户列出。

函数应用于所有唯一身份用户,最终table被转置。