Saturday, June 23, 2018

r - Reshaping data.frame from wide to long format



I have some trouble to convert my data.frame from a wide table to a long table.

At the moment it looks like this:



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


Now I would like to transform this data.frame into a long data.frame.
Something like this:




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


I have looked at and already tried using the melt() and the reshape() functions
as some people were suggesting in similar questions.
However, so far I only get messy results.



If it is possible I would like to do it with the reshape() function since
it looks a little bit nicer to handle.


Answer




reshape() takes a while to get used to, just as melt/cast. Here is a solution with reshape, assuming your data frame is called d:



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


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...