Вдохновленный комментарием от @gsk3 на вопрос о переформатировании данных, я начал немного экспериментировать с перестройкой данных, где имена переменных имеют символьные суффиксы вместо числовых суффиксов.
В качестве примера я загружу набор данных dadmomw
из одного из веб-страниц UCLA ATS Stata (см. "Пример 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
При попытке переформатировать из этого широкого формата в long, я столкнулся с проблемой. Вот что я делаю, чтобы изменить данные.
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 заменяет столбцы в примере, который я предоставил?
- Могу ли я получить этот результат с базой R
reshape
без изменения имен переменных перед изменением формы? - Существуют ли другие подходы, которые можно было бы рассмотреть вместо
reshape
?