2016-05-30 5 views
2

の数をカウントし、私は現在、私はこのようになりますデータフレームを持つアプリケーションに取り組んでいますが:崩壊と私は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) 

をしかし、それは私に正しい結果を与えるものではありません。

ここでの目標は、ユーザーが最初にやるセッションの数を決定し、ユーザーが持つセッションの数とセッションの数を決定することです。

誰かがこれを手伝ってくれれば、とても涼しいでしょう!

+0

予想される出力を示してください。おそらく 'ライブラリ(data.table); SETDT(DF1)[、.N、名前(DF1)]それは私の最初のセッションの時間を与える必要がありますが、 ' – akrun

答えて

2

data.tableを使用できます。 'data.frame'を 'UserId'でグループ化した 'data.table'(setDT(df1))に変換し、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 
+0

1は18でなく14 –

+0

で第1回会合を持っている例のユーザーID番号のため、この場合には、ありがとう@ AlbanCouturier確認してください、私は投稿を更新しました – akrun

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は数字ですユーザーのためにリストされた異なる日付の

機能は、すべてのユニークユーザーに適用され、最終的なテーブルが転置されます。

関連する問題