【问题标题】:Collapse and count the number of unique value折叠并计算唯一值的数量
【发布时间】:2016-09-28 03:05:32
【问题描述】:

我对 R 比较陌生,我目前正在开发一个应用程序,其中有一个如下所示的数据框:

数据库 用户 ID 小时日期 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,确定用户有多少个会话以及有多少个不同的会话日期。

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

【问题讨论】:

  • 请显示预期的输出。也许library(data.table); setDT(df1)[, .N ,names(df1)]

标签: r date session collapse unique-values


【解决方案1】:

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'UserId'分组,我们order'Date',得到first'Hour',会话总数(@987654325 @) 和 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

【讨论】:

  • 谢谢,虽然它应该给我第一次会话的时间,在这种情况下,例如 UserId#1 的第一次会话在 18 点而不是 14 点
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多