-3

国年ベースの単純化されたデータセットを以下に示します。

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 への変換を実行するコードを提供していただければ、それを拡張して問題を解決できます。

ありがとう!

4

1 に答える 1

0

あなたのタイトルは、ある種のデータのクリーンアップまたはサブセット化を暗示していますが、ここで求めているのは集計または要約です。提供されたデータを使用してそれを行うことdplyrは、優れたオプションです。

library(dplyr)
df2 <- group_by(df1, country) %>% 
       summarize(start = min(year), end = max(year), v1Max = max(v1), v1Avg = mean(v1))

# A tibble: 3 x 5
#   country start   end v1Max v1Avg
#    <fctr> <dbl> <dbl> <dbl> <dbl>
#1 CountryA  2001  2004     5  3.50
#2 CountryB  2001  2004     3  2.25
#3 CountryC  2001  2004     4  2.50
于 2016-08-09T02:14:28.883 に答える