A simple feature to turn wide format into long format in R.
I have a dataset with the annual per capita military budget for 171 countries.
The problem is that it is in completely wrong format to use for panel data (i.e. cross-sectional time-series analysis).
So here is simple way I found to fix this problem and turn this:
It’s like magic.
First install and load the
I name my new long form dataframe; in this case, the imaginatively named
I use the
melt() function and first type in the name of the original I want to change; in this case it is
id.vars tells R the unique ID for each new variable. Since I am looking at military budgets for each country, I’ll use
Country variable as my ID.
variable.name for me is the year variable which, in wide format, is the name of every column. For me, I want to compress all the year columns into this new variable.
value.name is the new variable I make to hold the value that in my dataset is the per capita military budget amount per country per year. I name this new variable … you guessed it,
mil_long <- melt(mil_wide, id.vars= "Country", variable.name = "year", value.name = "value"))
So simple, it’s hard to believe.
Looking at my new
mil_long dataset, my new long format dataframe has only three columns = “Country”, “year” and “value” and 5,504 rows for each country-year observation across the 32 years.
Now, my dataframe is ready to be transformed into a panel data frame!
reshape2 has two main functions which I think have quite memorable names:
melt is for wide-format dataframes that you want to “melt” into long-format.
cast for dataframes in long-format data which you figuratively “cast” into a wide-format dataframe.
As a poli-sci person, I have so far only turned my dataframe in long form, for eventual panel data analysis with
Click here to see how to transform dataframes into panel dataframes with the
Click here to read the full
reshape2 package documentation on CRAN