折叠并计算唯一值的数量

时间:2016-05-30 10:11:35

标签: r date session collapse unique-values

我是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,确定用户拥有的会话数和会话日期数。

如果有人可以提供帮助,那将非常酷!

3 个答案:

答案 0 :(得分:2)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'UserId'分组,我们order'日期',获取first'小时',总计会话数(.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

答案 1 :(得分:0)

您也可以使用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

答案 2 :(得分:0)

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

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是列出的不同日期的数量用户。

该功能适用​​于所有唯一用户,并且最终表格已转置。