15

データの再形成に関する質問に対する @gsk3 からのコメントに触発されて、変数名に数字の接尾辞ではなく文字の接尾辞があるデータの再形成について少し実験を始めました。

例として、 UCLA ATS Stata 学習 Web ページdadmomwの 1 つからデータセットを読み込みます(Web ページの「例 4」を参照)。

データセットは次のようになります。

library(foreign)
dadmom <- read.dta("https://stats.idre.ucla.edu/stat/stata/modules/dadmomw.dat")
dadmom
#   famid named  incd namem  incm
# 1     1  Bill 30000  Bess 15000
# 2     2   Art 22000   Amy 18000
# 3     3  Paul 25000   Pat 50000

このワイド フォーマットからロング フォーマットに変更しようとすると、問題が発生します。これが、データを再形成するために私がすることです。

reshape(dadmom, direction="long", idvar=1, varying=2:5, 
        sep="", v.names=c("name", "inc"), timevar="dadmom",
        times=c("d", "m"))
#     famid dadmom  name  inc
# 1.d     1      d 30000 Bill
# 2.d     2      d 22000  Art
# 3.d     3      d 25000 Paul
# 1.m     1      m 15000 Bess
# 2.m     2      m 18000  Amy
# 3.m     3      m 50000  Pat

「name」と「inc」の列名が入れ替わっていることに注意してください。に変更v.namesc("inc", "name")ても問題は解決しません。

reshapeかなり標準的な方法で列に名前を付けたいということについて、非常にうるさいようです。たとえば、最初に列の名前を変更すると、データを正しく (そして簡単に) 再形成できます。

dadmom2 <- dadmom # Just so we can continue experimenting with the original data
# Change the names of the last four variables to include a "."
names(dadmom2)[2:5] <- gsub("(d$|m$)", "\\.\\1", names(dadmom2)[2:5])
reshape(dadmom2, direction="long", idvar=1, varying=2:5, 
        timevar="dadmom")
#     famid dadmom name   inc
# 1.d     1      d Bill 30000
# 2.d     2      d  Art 22000
# 3.d     3      d Paul 25000
# 1.m     1      m Bess 15000
# 2.m     2      m  Amy 18000
# 3.m     3      m  Pat 50000

私の質問は次のとおりです。

  1. 私が提供した例で R が列を交換しているのはなぜですか?
  2. reshape再形成する前に変数名を変更せずにベース R でこの結果を得ることができますか?
  3. の代わりに考えられる他のアプローチはありreshapeますか?
4

3 に答える 3

11

これは機能します(どの列が誰と一緒に行くかを変えるように指定するため):

reshape(dadmom, direction="long",  varying=list(c(2, 4), c(3, 5)), 
        sep="", v.names=c("name", "inc"), timevar="dadmom",
        times=c("d", "m"))

したがって、実際にはここで繰り返しメジャーがネストされています。お母さんとお父さんの両方の名前と株式会社。複数の一連の反復測定があるため、どのグループが他のグループに積み上げlistられるかを示す変数を指定する必要があります。reshape

したがって、この問題に対する 2 つのアプローチは、私が行ったようにリストを提供するか、R 獣が好きなように列の名前を変更することです。

詳細については、base の最近のブログを参照してくださいreshape(特に、2 番目のリンクがこれを扱っています)。

形を変える(パートI)

形を変える(パートII)

于 2012-05-06T12:19:09.410 に答える