3

私はRに比較的慣れていませんが、現在、次のようなデータフレームを持つアプリケーションに取り組んでいます:

データベース
UserId 時間 日付
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、ユーザーが最初に行ったセッションを特定し、ユーザーが何回のセッションを行い、何回の異なるセッションを行ったかを決定することです。

誰かがこれを乗り越えるのを助けることができれば、それはとてもクールです!

4

3 に答える 3

2

を使用できますdata.table。'data.frame' を 'data.table' ( setDT(df1)) に変換し、'UserId' でグループ化してorder、'Date' を取得し、first'Hour'、合計セッション数 ( .N)、およびuniqueDate 要素の数 ( ) を取得します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
于 2016-05-30T10:17:36.940 に答える
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にリストされた異なる日付の数です。

関数はすべての一意のユーザーに適用され、最終的なテーブルが転置されます。

于 2016-05-30T11:33:55.517 に答える