R : Convert Data from Wide to Long Format

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.
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
ListenData Logo
Spread the Word!
Related Posts
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 has worked with global clients in various domains like Banking, Insurance, Private Equity, Telecom and Human Resource.

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

  2. #sample data
    household <- data.frame(county = c("Nairobi",
    subCounty = c("Dagoretti",
    Name_p1 = c("Tiana",
    Age_p1 = c(25, 16, 15, 45),

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


Next → ← Prev
Looks like you are using an ad blocker!

To continue reading you need to turnoff adblocker and refresh the page. We rely on advertising to help fund our site. Please whitelist us if you enjoy our content.