データの再形成に関する質問に対する @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.names
しc("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
私の質問は次のとおりです。
- 私が提供した例で R が列を交換しているのはなぜですか?
reshape
再形成する前に変数名を変更せずにベース R でこの結果を得ることができますか?- の代わりに考えられる他のアプローチはあり
reshape
ますか?