243 votes

Le remodelage de données.cadre large format long

J'ai du mal à convertir mes données.une image d'une grande table à une longue table. Pour le moment, il ressemble à ceci:

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

Maintenant, j'aime transformer ces données.cadre dans une longdonnées.cadre. Quelque chose comme ceci:

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

J'ai regardé et essayé déjà avec l' melt() et de la reshape()fonctions comme certaines personnes ont suggérant à des questions similaires. Cependant, jusqu'à présent, je seulement obtenir malpropre résultats.

Si c'est possible, je voudrais le faire avec l' reshape() fonction depuis il a l'air un peu plus agréable à manipuler.

222voto

Jaap Points 3814

Une solution avec le nouveau dplyr et tidyr forfaits à partir de Hadley Wickham:

# reading the data
wide <- read.table(text="Code Country        1950    1951    1952    1953    1954
AFG  Afghanistan    20249  21,352  22,532  23,557  24,555
ALB  Albania        8,097   8,986   10,058  11,123  12,246", header=TRUE, check.names=FALSE)

# loading the packages
library(dplyr)
library(tidyr)

# reshaping from wide to long
long <- wide %>% gather(year, value, -c(1,2)) %>% arrange(Code)

136voto

Aniko Points 7555

reshape() prend un certain temps pour se utilisé pour, comme melt/cast. Voici une solution avec les remodeler, en supposant que votre bloc de données id appelés d:

reshape(d, direction="long", varying=list(names(d)[3:7]), v.names="Value", 
        idvar=c("Code","Country"), timevar="Year", times=1950:1954)

39voto

Shane Points 40885

Ici, vous allez:

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"]))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X