У меня возникли проблемы с преобразованием моего 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()
, так как с ней выглядит немного приятнее.
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)
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"]))