У меня есть следующий фреймворк:
Variables Varcode Country Ccode 2000 2001
1 Power P France FR 1213 1234
2 Happiness H France FR 1872 2345
3 Power P UK UK 1726 6433
4 Happiness H UK UK 2234 9082
I would like to reshape this dataframe as follows:
Year Country Ccode P(label=Power) H(label=Happiness)
1 2000 France FR 1213 1872
2 2001 France FR 1234 2345
3 2000 UK UK 1726 2234
4 2001 UK UK 6433 9082
Исходный код был следующим:
library(tidyverse)
df %>%
gather(Year, val, -Variables, -Country) %>%
spread(Variables, val)
Я попытался расширить код, потому что Ccode
и Indicator Code
оказались строкой в списке, и я решил, что хочу использовать коды как имена переменных, а имена переменных как метки (обратите внимание, что из-за этого я поменял местами -Variables
и Variables
с -Varcode
и Varcode
соответственно):
library(tidyverse)
library(Hmisc)
List <- df$Variables
df<-df %>%
gather(Year, val, -Varcode, -Country) %>%
spread(Varcode, val)
for(i in List){
label(df[,i]) <- List[i]
}
Обратите внимание: я использую список из-за ограничений памяти.
Я столкнулся с двумя проблемами:
- Преобразование не проходит гладко, потому что два дополнительных столбца из
df
(среди которыхVariables
) добавляются туда, где должны быть значения. - Функция метки выдает ошибку.
Может ли кто-нибудь помочь мне разобраться, что идет не так?