1

パネル形式 (国-年) の data.frame があり、国別および 5 年ごとに変数の平均を計算する必要があります。そのため、「reshape」パッケージの「キャスト」機能を使用したところ、機能しました。ここで、この情報 (5 年間の平均) を古い data.frame に入れる必要があるため、いくつかの回帰を実行できます。どうやってやるの?以下に、私が望むものを説明する例を示します。

set.seed(2)
fake= data.frame(y=rnorm(20), x=rnorm(20), country=rep(letters[1:2], each=10), year=rep(1:10,2), quinquenio= rep(rep(1:2, each=5),2))

fake.m = melt.data.frame(fake, id.vars=c("country", "year", "quinquenio"))
cast(fake.m, country ~ quinquenio, mean, subset=variable=="x", na.rm=T)

これで、すべて問題なく、目的の結果が得られました。国別および 5 年ごとの x と y の平均です。ここで、次のように、それらを data.frame 偽物に戻したいと思います。

         y            x      country year quinquenio  mean.x
1  -0.89691455  2.090819205       a    1          1    0.8880242
2   0.18484918 -1.199925820       a    2          1    0.8880242
3   1.58784533  1.589638200       a    3          1    0.8880242
4  -1.13037567  1.954651642       a    4          1    0.8880242
5  -0.08025176  0.004937777       a    5          1    0.8880242
6   0.13242028 -2.451706388       a    6          2    -0.2978375
7   0.70795473  0.477237303       a    7          2    -0.2978375
8  -0.23969802 -0.596558169       a    8          2    -0.2978375
9   1.98447394  0.792203270       a    9          2    -0.2978375
10 -0.13878701  0.289636710       a   10          2    -0.2978375
11  0.41765075  0.738938604       b    1          1    0.2146461
12  0.98175278  0.318960401       b    2          1    0.2146461
13 -0.39269536  1.076164354       b    3          1    0.2146461
14 -1.03966898 -0.284157720       b    4          1    0.2146461
15  1.78222896 -0.776675274       b    5          1    0.2146461
16 -2.31106908 -0.595660499       b    6          2    -0.8059598
17  0.87860458 -1.725979779       b    7          2    -0.8059598
18  0.03580672 -0.902584480       b    8          2    -0.8059598
19  1.01282869 -0.559061915       b    9          2    -0.8059598
20  0.43226515 -0.246512567       b   10          2    -0.8059598

正しい方向へのヒントに感謝します。前もって感謝します。

ps .: これが必要な理由は、5 年ごとのデータを使用して回帰を実行するためです。一部の変数 (1 人あたりの収入など) については、すべての年の情報があるため、それらを 5 年で平均化することにしました。

4

2 に答える 2

3

reshape を使用してこれを行う簡単な方法があると確信していますが、私の脳はデフォルトでplyr最初に設定されています。

require(plyr)
ddply(fake, c("country", "quinquenio"), transform, mean.x = mean(x))

これは非常にハックですが、reshape を使用して以前の作業を構築する 1 つの方法:

zz <- cast(fake.m, country ~ quinquenio, mean, subset=variable=="x", na.rm=T)
merge(fake, melt(zz), by = c("country", "quinquenio"))

私は肯定的ですが、より良い解決策が必要です。

于 2011-05-19T22:46:25.627 に答える
2

tapplyave、およびを使用した、より古い学校のアプローチを次に示します。with

fake$mean.x <- with(fake, unlist(tapply(x, list(country, quinquenio), ave)))
于 2011-05-20T10:55:48.650 に答える