2012-04-17 9 views
3

データフレームdfには「メッセージ」が含まれています。各行はメッセージです。各メッセージにはdf$messagedateというタイムスタンプがPOSIXct形式の%Y-%m-%d %H:%M:%Sにあります。例:Rを使用して、すべてのイベントとそのタイムスタンプを含むデータフレームから1日あたりの合計イベントを計算します。

> head(df) 
messageid user.id message.date   
123   999  2011-07-17 17:54:27 
456   888  2011-07-19 16:56:50 

(ここでは上記のdput()」EDバージョンがある):

df <- structure(list(messageid = c(123L, 456L), user.id = c(999L, 888L), 
     message.date = structure(c(1310950467, 1311119810), class = c("POSIXct", 
     "POSIXt"), tzone = "")), .Names = c("messageid", "user.id", 
     "message.date"), row.names = c(NA, -2L), class = "data.frame") 

がどのように私は一日あたりのメッセージ数、合計でデータフレームを作成するのですか?例:メッセージなしで日付を含む

day     message.count 
2011-07-17    1 
2011-07-18    0 
2011-07-19    1 

よりもむしろない、私はmessage.countがそれらの日のためにゼロに設定されていることを確認します。

私がこれまで行っている:私は実行してmessage.dateのカレンダーの日の部分を抽出しています

df$calendar.day<-as.POSIXct(strptime(substr(df$message.date,1,10),"%Y-%m-%d",tz="CST6CDT")) 
> head(df$calendar.day) 
[1] "2011-07-17 CDT" "2011-07-18 CDT" "2011-07-19 CDT" 

そして、そこから私は、日付範囲のすべての単一のカレンダー日付のリストを生成することができます: 日付範囲を< - seq(min(df $ calendar.day)、max(df $ calendar.day)、by = "day")

+3

あなたは 'dput(DF)'(またはおそらくdput(DF使用している場合は、[1:5])、あなたは私たちが –

答えて

2

ここでは、sapply()を使用して、ログにまたがる各日付のメッセージ数を数える、かなり簡単な解決法を示します。

countMessages <- function(timeStamps) { 
    Dates <- as.Date(strftime(df$message.date, "%Y-%m-%d")) 
    allDates <- seq(from = min(Dates), to = max(Dates), by = "day") 
    message.count <- sapply(allDates, FUN = function(X) sum(Dates == X)) 
    data.frame(day = allDates, message.count = message.count) 
} 

countMessages(df$message.date) 
#   day message.count 
# 1 2011-07-17    1 
# 2 2011-07-18    0 
# 3 2011-07-19    1 
+0

ありがとう非常に簡潔ですが、入力パラメータは列ではなくデータフレーム(df)であってはいけません。タイムスタンプ)? – amh

1

table()関数では単にas.data.frameを使用できるはずですテーブル結果をデータフレームに強制する。例えば:中

test_data <- data.frame(date=c("March","April","April","May"),messageid=c(1,2,3,4),userid=c(55,33,1,56)) 
print(as.data.frame(table(test_data[1]))) 

結果:

Var1 Freq 
1 April 2 
2 March 1 
3 May 1 

ゼロのメッセージを持っている日付に追加するには、それはあなたが(のためのプロジェクトに適用されるすべての日付のベクトルを生成することができると私を打ちますたとえば、ファイルが1年全体をカバーしている場合)、そのベクトルをtableステートメントを使用して作成されたデータフレームと比較します。それらを一緒にマージし、続いてNAであるものに0を割り当てます。例えば

:この例では明らかに

months <- c("January","February","March","April","May","June") 
full <- merge(counts,months,by=1,all=TRUE) 

、データフレームが変なふうに注文しようとしているが、あなたはPOSIXベクトルを作成するかどうかは問題ではありません。

+0

おっと、それを試しに役立つ再現可能なバージョンを取得します、私は「didnの参照 – TARehman

関連する問題