折叠并计算唯一值的数量

3

我正在处理一款应用程序,其中有一个数据框架长这样:

Database
用户ID         小时数         日期
01                18           2016年1月1日
01                18           2016年1月1日
01                14           2016年2月1日
01                14           2016年2月1日
02                21           2016年2月1日
02                08           2016年5月1日
02                08           2016年5月1日
03                23           2016年5月1日

每行表示一个会话。

我需要确定用户的第一个会话的时间是否对该用户的会话数量产生影响。

我已经尝试使用summaryBy命令:

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

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

我的目标是确定用户进行第一次会话的小时数,并确定用户有多少个会话和多少不同的会话日期。


请展示预期输出。也许可以使用library(data.table); setDT(df1)[, .N ,names(df1)]来实现。 - akrun
3个回答

2
我们可以使用`data.table`。将“data.frame”转换为“data.table”(`setDT(df1)`),按“UserId”分组,通过对“Date”进行排序(`order`)获取“第一次”访问的时间,“session”的总数(`.N`)以及“Date”元素的唯一数量(`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

谢谢,尽管它应该给我第一次会话的时间,但在这种情况下,例如UserId#1的第一次会话是在18点而不是14点。 - Alban Couturier

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

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

该函数适用于所有唯一用户,并将最终表格转置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接