2016-11-04 27 views
-8

私はイベントとその時間のリストを持っています。私はhistを使ってヒストグラムをプロットすることができますが、それらの累積プロットを作成する方法はわかりません。イベントの累積プロットを作成するR

私が始めているデータの種類は次のとおりです。

2015-10-05 4:00: 20 events 
2015-10-05 4:15: 50 events 
2015-10-05 4:30: 61 events 

方法:私のような集計を取得したい

2015-10-05 4:00: 20 events 
2015-10-05 4:15: 30 events 
2015-10-05 4:30: 11 events 

例えば
> events$time 

[1] 2015-10-05 16:58:41.986797 2015-10-05 16:59:23.389583 
[3] 2015-10-05 16:59:44.99402 2015-10-05 16:59:53.225178 
[5] 2015-10-05 16:59:59.594524 2015-10-05 17:00:05.555564 
[7] 2015-10-05 17:00:44.173783 2015-10-05 17:00:46.289552 
[9] 2015-10-05 17:00:56.772485 2015-10-05 17:01:18.937458 
[11] 2015-10-05 17:02:04.661378 

and so on for ~8000 values 

、私のヒストグラム上で、私のようなものを持っている(と仮定し、それはPOSIXct形式ですでにます)私はそれをしますか?

+1

'プロット(関数ecdf(イベント$時間))' [PS:Zheyuanに述べたように、Rタグのユーザーが 'dput'を使用してデータを追加することの曖昧さを除去することがわかりデータ。ですから、あなたの質問では 'dput(events $ time [1:10])'で質問を編集できます。 cheers] – user20650

+0

...または 'timez < - sample(Sys.time()+ 1:1000、100)'のような例です。最初に、15分のスロットにデータを集約し、イベントをカウントしてプロットしたいのですか? – user20650

+0

ヒストグラムヒストグラムは100のような任意の数のブレークを使用して試しました –

答えて

1

可能溶液:

library(lubridate) 

# example time data 
time = c(
    "2015-10-05 15:44:41.986797", "2015-10-05 15:59:23.389583", "2015-10-05 16:59:44.99402", 
    "2015-10-05 16:59:44.99402", "2015-10-05 16:59:44.99402", "2015-10-05 16:59:44.99402", 
    "2015-10-05 17:59:59.594524", "2015-10-05 17:59:59.594524", "2015-10-05 18:00:05.555564" 
) 

# transform time strings to POSIXct objects for count 
time <- ymd_hms(time) 

# count by second 
event <- data.frame(table(time)) 

# transform time factors to POSIXct objects for df 
event$time <- ymd_hms(event$time) 

# find start and end time for 15min sequence 
start <- round(min(event$time), "mins") 
if (min(event$time) < start) { 
    minute(start) <- minute(start) - 1 
} 
while (minute(start) %% 15 != 0) { 
    minute(start) <- minute(start) - 1 
} 

end <- round(max(event$time), "mins") 
if (max(event$time) > end) { 
    minute(end) <- minute(end) + 1 
} 
while (minute(end) %% 15 != 0) { 
    minute(end) <- minute(end) + 1 
} 

# create sequence and result data.frame 
ft.seq <- seq(start, end, "15 mins") 

ft.event <- data.frame(
    start = ft.seq[1:(length(ft.seq)-1)], 
    end = ft.seq[2:(length(ft.seq))], 
    sum = 0 
) 

# ugly, nested loop to attribute values to 15min time slices 
for (p1 in 1:nrow(ft.event)) { 
    for (p2 in 1:nrow(event)) { 
    if (event$time[p2] > ft.event$start[p1] && 
     event$time[p2] < ft.event$end[p1]) { 
     ft.event$sum[p1] <- ft.event$sum[p1] + event$Freq[p2] 
    } 
    } 
} 

# cumsum 
ft.event$cumsum <- cumsum(ft.event$sum) 

# example plot 
library(ggplot2) 

ggplot(ft.event) + 
    geom_line(aes(x = end, y = cumsum)) 
+0

あなたの答えははっきりしていますが、その「イベント」列はありません。つまりイベントには「価値」がなく、唯一の関連データは特定の時間に起こったという事実だけです。 –

+0

OPは15分のタイムスタンプごとにイベント数を集計する必要があるようです – agenis

+0

@JonathanAllardこれは機能しますか? – nevrome

関連する問題