国年ベースの単純化されたデータセットを以下に示します。
country <- c("CountryA", "CountryA", "CountryA", "CountryA",
"CountryB", "CountryB", "CountryB", "CountryB",
"CountryC", "CountryC", "CountryC", "CountryC")
year <- c(2001, 2002, 2003, 2004,
2001, 2002, 2003, 2004,
2001, 2002, 2003, 2004)
v1 <- c(2, 3, 5, 4, 3, 3, 1, 2, 1, 4, 3, 2)
df1 <- data.frame(country, year, v1)
df1
country year v1
CountryA 2001 2
CountryA 2002 3
CountryA 2003 5
CountryA 2004 4
CountryB 2001 3
CountryB 2002 3
CountryB 2003 1
CountryB 2004 2
CountryC 2001 1
CountryC 2002 4
CountryC 2003 3
CountryC 2004 2
私の質問は:
以下のような、上記のデータ セットのインシデント ベースのサブセットを作成するコードを作成するにはどうすればよいですか。
cntry <- c("CountryA", "CountryB", "CountryC")
stYear <- c(2001, 2002, 2003)
endYear <- c(2003, 2004, 2003)
v1Max <- c(5, 3, 3)
v1Ave <- c(3.33, 2, 3)
df2 <- data.frame(cntry, year, v1)
df2
cntry stYear endYear v1Max v1Ave
CountryA 2001 2003 5 3.33
CountryB 2002 2004 3 2
CountryC 2003 2003 3 3
つまり、各インシデントを個別に新しいデータ フレームにコーディングする必要があります。(たとえば、上記の df2 の最初の行は2001 年から 2003 年までの CountryA でのインシデントです。) これを行っている間、対応する時間枠内の値も再コード化する必要があります。(たとえば、df2 の v1Max は、インシデントの期間中に v1 が df1 で取得した最大値です。同様に、df2 の v1Ave は平均です。)
上記の df1 から df2 への変換を実行するコードを提供していただければ、それを拡張して問題を解決できます。
ありがとう!