Breite bis lange Form mit Zeichensuffixen anstelle von numerischen Suffixen ändern

Inspiriert vonein Kommentar Von @ gsk3 an habe ich ein wenig experimentiert, um Daten umzugestalten, wobei die Variablennamen anstelle von numerischen Suffixen Zeichensuffixe haben.

Als Beispiel lade ich dasdadmomw Datensatz von einem derUCLA ATS Stata-Lernwebseiten (siehe "Beispiel 4" auf der Webseite).

So sieht der Datensatz aus:

<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>

Beim Versuch, von diesem Breitformat zu lang umzuformen, stoße ich auf ein Problem. Hier ist, was ich tue, um die Daten umzugestalten.

<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>

Beachten Sie die getauschten Spaltennamen für "name" und "inc". Ändernv.names zuc("inc", "name") löst das Problem nicht.

reshape Es scheint sehr wählerisch zu sein, zu wollen, dass die Spalten auf eine ziemlich standardmäßige Weise benannt werden. Zum Beispiel kann ich die Daten korrekt (und einfach) umformen, wenn ich die Spalten zuerst umbenenne:

<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>

Meine Fragen sind:

Warum tauscht R die Spalten in dem von mir bereitgestellten Beispiel aus?Kann ich mit der Basis R zu diesem Ergebnis kommen?reshape ohne die Variablennamen vor der Umformung zu ändern?Gibt es andere Ansätze, die stattdessen in Betracht gezogen werden könnten?reshape?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage