Изменение формы data.frame из широкого в длинный формат

У меня возникли проблемы с преобразованием моего data.frame из широкого стола в длинный стол. На данный момент это выглядит так:

Code Country        1950    1951    1952    1953    1954
AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555
ALB  Albania        8,097   8,986   10,058  11,123  12,246

Теперь я хотел бы преобразовать это data.frame в длинный data.frame. Примерно так:

Code Country        Year    Value
AFG  Afghanistan    1950    20,249
AFG  Afghanistan    1951    21,352
AFG  Afghanistan    1952    22,532
AFG  Afghanistan    1953    23,557
AFG  Afghanistan    1954    24,555
ALB  Albania        1950    8,097
ALB  Albania        1951    8,986
ALB  Albania        1952    10,058
ALB  Albania        1953    11,123
ALB  Albania        1954    12,246

Я смотрел и уже пытался использовать функции melt() и reshape(), как предлагали некоторые люди в подобных вопросах. Однако, пока я получаю только грязные результаты.

Если это возможно, я бы хотел сделать это с помощью функции reshape(), так как с ней выглядит немного приятнее.

142
задан NelsonGon 15 May 2019 в 03:51
поделиться

2 ответа

reshape () нужно время, чтобы привыкнуть, так же как плавить / cast . Вот решение с изменением формы, предполагая, что ваш фрейм данных называется d :

reshape(d, 
        direction = "long",
        varying = list(names(d)[3:7]),
        v.names = "Value",
        idvar = c("Code", "Country"),
        timevar = "Year",
        times = 1950:1954)
82
ответ дан 23 November 2019 в 23:04
поделиться

Using reshape package:

#data
x <- read.table(textConnection(
"Code Country        1950    1951    1952    1953    1954
AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555
ALB  Albania        8,097   8,986   10,058  11,123  12,246"), header=TRUE)

library(reshape)

x2 <- melt(x, id = c("Code", "Country"), variable_name = "Year")
x2[,"Year"] <- as.numeric(gsub("X", "" , x2[,"Year"]))
33
ответ дан 23 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: