R : Convert Data from Wide to Long Format

Deepanshu Bhalla 2 Comments
This tutorial explains how to convert data from wide to long format with R programming.
R Code : Convert Data from Wide to Long
Note : Before running the code below, Install reshape2 package if not installed already.

R Code

The following program would create a sample data for demonstration.
df = read.table(text= "ID Product1 Product2 Product3 Product4
1 1 NA 1 1
2 1 1 NA 1
3 1 1 NA NA
4 1 1 1 1", header=TRUE)
The following code would turn our data from wide to long format.
library(reshape2)
x = colnames(df[,-1])
t2 <- melt(df,id.vars = "ID",measure.vars = x , variable.name="Product", value.name="value",na.rm = TRUE)
t2 = t2[order(t2$ID),]

Explanation :

  1. id.vars - additional variables to keep in the output.
  2. measure.vars - variables to be reshaped
  3. variable.name - name of variable used to store measured variable names
  4. value.name - name of variable used to store values


Note : If you do not want to remove NA values, make na.rm = TRUE to na.rm = FALSE.

Tutorial : Convert data from long to wide format
Related Posts
Spread the Word!
Share
About Author:
Deepanshu Bhalla

Deepanshu founded ListenData with a simple objective - Make analytics easy to understand and follow. He has over 10 years of experience in data science. During his tenure, he worked with global clients in various domains like Banking, Insurance, Private Equity, Telecom and HR.

2 Responses to "R : Convert Data from Wide to Long Format"
  1. I would use tidyr for a nice clean data conversion

    ReplyDelete
  2. #sample data
    household <- data.frame(county = c("Nairobi",
    "Kiambu",
    "Laikipia",
    "Murang'a"),
    subCounty = c("Dagoretti",
    "Lari",
    "L.North",
    "Kigumo"),
    Name_p1 = c("Tiana",
    "Joseph",
    "Ochweri",
    "Maina"),
    Age_p1 = c(25, 16, 15, 45),

    Name_p2 = c(NA,
    "Mary",
    NA,
    "Susan"),
    Age_p2 = c(NA, 34, NA, 16))
    ##How would you convert this to long format?

    ReplyDelete
Next → ← Prev