изменить форму от широкой к длинной с символьными суффиксами вместо числовых суффиксов
Вдохновленныйкомментарий С @ gsk3 по вопросу о реформировании данных я начал немного экспериментировать с реформированием данных, где имена переменных имеют символьные суффиксы вместо числовых суффиксов.
В качестве примера я загружуdadmomw
набор данных из одного изUCLA ATS Stata обучающие веб-страницы (см. «Пример 4» на веб-странице).
Вот как выглядит набор данных:
<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>
При попытке изменить форму из этого широкого формата в длинный я сталкиваюсь с проблемой. Вот что я делаю, чтобы изменить данные.
<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>
Обратите внимание на замененные имена столбцов для & quot; имени & quot; и & quot; inc & quot ;; измененияv.names
вc("inc", "name")
не решает проблему.
reshape
кажется очень требовательным к желанию именовать столбцы довольно стандартным способом. Например, я могу изменить данные правильно и легко, если я сначала переименую столбцы:
<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>
Мои вопросы:
Why is R swapping the columns in the example I've provided? Can I get to this result with base Rreshape
without changing the variable names before reshaping?
Are there other approaches that could be considered instead of reshape
?