2012-03-07 16 views
0

dfは、数年以内のバトルイベント&競合です。私は紛争の年の間に戦闘の平均距離(時間)を計算しようとしています。グループ化されたイベント間の平均時間 - 距離

ヘッダーは、このようなものになります。私が最初に試した何

conflictId | year | event_date | event_type 
107   1997 1997-01-01 1 
107   1997 1997-01-01 1 
20   1997 1997-01-01 1 
20   1997 1997-01-01 2 
20   1997 1997-01-03 1 

time_prev_total <- aggregate (event_date ~ conflictId + year, data, diff)

だったが、私はevent_dateは、新たなDFでリストされて終わります。 df内のリストの最初のインデックス位置を抽出しようとする試みは失敗しています。

また

それは私が各競合年以内の時間インデックスを作成することができることを私に示唆されたが、その後、インデックスは、とのことをconflictIdyearevent_dateで新しいデータフレームを作成し、遅れインデックス、その後、合併することを遅れます元のdfですが、新しいdfの遅れたインデックスと元のdfの古いインデックスを一致させます。私はこれを実装しようとしましたが、obsをどのように索引付けするかは少し不明です。バランスが取れていないため、紛争期間中に。

+0

再現性のないデータは、問題の発生場所を知ることが非常に困難です。少量のデータを提供してください。これは2つのことを行います:1)それはあなたを助けやすくなります2)あなたの質問を他の将来のサーチャーによってもっと使いやすくします –

+0

それについて申し訳ありません、私は適切な方法でそれをフォーマットすることができます。私はここでいくつかのタイプの初心者のエラーを作っていると仮定します。 – Zach

+0

これは問題ありません。 'x < - dat [c(1,2,3,10,11,12)、]'というインデックスを使っていくつかの行を選択し、 'dput(x)'を使って再現可能なデータを提供することができます。あなたは、他のスレッドを開き、再現可能なデータを提供することがあなたの目標の結果を得ることになるので、より多くの助けが必要な場合は質問してください。 –

答えて

2

ddplyを使用すると、data.frameを個数別の 個に分割し、それぞれに1つの関数を適用できます。

# Sample data 
n <- 100 
d <- data.frame(
    conflictId = sample(1:3,  n, replace=TRUE), 
    year  = sample(1990:2000, n, replace=TRUE), 
    event_date = sample(0:364,  n, replace=TRUE), 
    event_type = sample(1:10,  n, replace=TRUE) 
) 
d$event_date <- as.Date(ISOdate(d$year,1,1)) + d$event_date 
library(plyr) 

# Average distance between battles, within each year and conflict 
ddply(
    d, 
    c("year","conflictId"), 
    summarize, 
    average = mean(dist(event_date)) 
) 

# Average distance between consecutive battles, within each year and conflict 
d <- d[order(d$event_date),] 
ddply(
    d, 
    c("year","conflictId"), 
    summarize, 
    average = mean(diff(event_date)) 
) 
+0

あなたは紳士で学者です。どうもありがとうございました! – Zach

関連する問題