remodelar largamente para longo com sufixos de caracteres em vez de sufixos numéricos
Inspirado porum comentário de @ gsk3 em uma questão sobre remodelar dados, comecei a fazer um pouco de experimentação com dados de reformulação em que os nomes das variáveis têm sufixos de caracteres em vez de sufixos numéricos.
Por exemplo, vou carregar odadmomw
conjunto de dados de um dosPáginas de aprendizagem UCLA ATS Stata (veja "Exemplo 4" na página da web).
Veja como é o conjunto de dados:
<code>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 </code>
Ao tentar remodelar esse formato amplo para muito tempo, me deparo com um problema. Aqui está o que eu faço para remodelar os dados.
<code>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 </code>
Observe os nomes das colunas trocadas para "name" e "inc"; mudandov.names
parac("inc", "name")
não resolve o problema.
reshape
Parece muito exigente sobre querer que as colunas sejam nomeadas de uma forma bastante normal. Por exemplo, posso remodelar os dados corretamente (e facilmente) se eu renomear as colunas pela primeira vez:
<code>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 </code>
Minhas perguntas são:
Por que R está trocando as colunas no exemplo que eu forneci?Posso chegar a este resultado com base Rreshape
sem alterar os nomes das variáveis antes de reformular?Existem outras abordagens que poderiam ser consideradas em vez dereshape
?