2017-08-31 4 views
0

私はパネルデータの時系列を使用していますが、ある変数の平均の四分位で変数を作成したいので、与えられた四分位。異なることから企業を防ぐために、しかし、私は観測値ごとの平均値を行値として使用して四分円列を作成する

df<- within(df, Quartile* <- as.integer(cut(TotalAssets_wins, 
              quantile(value, probs=0:4/4), 
              include.lowest=TRUE))) 

私は四分位*の値を取得したいと思います:*などの標準的なアプローチの四分位で

df = 
    id year value Quartile* Quartile** 
    1 2010 1  1   1 
    1 2015 1  1   1 
    2 2010 10  2   2 
    2 2015 10  2   2 
    3 2010 10  2   3 
    3 2015 20  3   3 
    4 2010 40  4   4 
    4 2015 40  4   4 

:たとえば、場合、私は4社を持っています時間の四分位数。このため、Quartile **の値を得るために、会社ごとのすべての観測値の平均を与えた四分位値を計算したいと思います。重要な違いは、それらがしっかりとした依存値であることです。私のコードでこれを実装する方法に関するアイデア?

答えて

1

tapply,rankおよびsplitを使用する1つの方法があります。ここで

# create 0 vector 
dat$q <- 0 
# fill it in 
split(dat$q, dat$id) <- rank(tapply(dat$value, dat$id, FUN=mean)) 

tapplyはIDによって平均値を計算し、rankは、これらの手段をランク付け。この順位をsplitを使用してdata.frameの列qに入力します。補足として、tapplysplitは同じ順序で同じグループに観測を並べ替えるので、観察はこれが動作するために特定の順序になる必要はありません。

これは、Q列が四分位..列に所望の値に一致

dat 
    id year value Quartile. Quartile.. q 
1 1 2010  1   1   1 1 
2 1 2015  1   1   1 1 
3 2 2010 10   2   2 2 
4 2 2015 10   2   2 2 
5 3 2010 10   2   3 3 
6 3 2015 20   3   3 3 
7 4 2010 40   4   4 4 
8 4 2015 40   4   4 4 

を返します。

データ

dat <- 
structure(list(id = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), year = c(2010L, 
2015L, 2010L, 2015L, 2010L, 2015L, 2010L, 2015L), value = c(1L, 
1L, 10L, 10L, 10L, 20L, 40L, 40L), Quartile. = c(1L, 1L, 2L, 
2L, 2L, 3L, 4L, 4L), Quartile.. = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
4L)), .Names = c("id", "year", "value", "Quartile.", "Quartile.." 
), class = "data.frame", row.names = c(NA, -8L)) 
+0

、答えのためのおかげで偉大なチームメイトを探します! –

関連する問題