How to Stack DataFrame Columns in R? - GeeksforGeeks

19 Dec, 2021
A dataframe is a tubular structure composed of rows and columns. The dataframe columns can be stacked together to divide the columns depending on the values contained within them. 
The cbind() operation is used to stack the columns of the data frame together. Initially, the first two columns of the data frame are combined together using the df[1:2]. This is followed by the application of stack() method applied on the last two columns. 
The stack method in base R is used to transform data available in the form of separate columns within a data frame or a list into a single column. The stack method produces a result in the form of a data frame with two columns:
values: the result produced by concatenating the selected vectors in x.
ind: a factor indicating from which vector in x the observation originated.
Syntax:
stack(x)
Arguments : 
x – a list or data frame to be stacked
Original Data frame looks as:
     col1 semester quiz_sst quiz_maths
1    Yash        A        1          2
2    Yash        B        3          4
3 Mallika        A        4          6
4 Mallika        B        8          2
5  Muskan        A        9          7
6  Muskan        B        1          3
R
# creating a data framedata <- data.frame(col1=c('Yash', 'Yash', 'Mallika',                           'Mallika', 'Muskan', 'Muskan'),                   semester=c(rep(LETTERS[1:2],3)),                   quiz_sst=c(1, 3, 4, 8, 9, 1),                   quiz_maths=c(2, 4, 6, 2, 7, 3))  # binding the first two columns as it is # and stacking the third and fourth columnsdata_mod <- cbind(data[1:2], stack(data[3:4]))print(data_mod)
Output
     col1 semester  values        ind
1     Yash        A      1   quiz_sst
2     Yash        B      3   quiz_sst
3  Mallika        A      4   quiz_sst
4  Mallika        B      8   quiz_sst
5   Muskan        A      9   quiz_sst
6   Muskan        B      1   quiz_sst
7     Yash        A      2 quiz_maths
8     Yash        B      4 quiz_maths
9  Mallika        A      6 quiz_maths
10 Mallika        B      2 quiz_maths
11  Muskan        A      7 quiz_maths
12  Muskan        B      3 quiz_maths
The reshape2 package in R can be used to change the structure of the data supplied and can be installed and imported into the working space using the following command : 
install.packages("reshape2")
library(reshape2)
The melt method in this package can be used to stack data frame columns together. It is used to reshape and elongate the data frame. The melt() method has the following syntax : 
melt(data, id.var , variable.name)
Arguments : 
data – The data frame to stack columns of
id.ar – The columns to use as primary key
variable.name – The new column name to append
Original Data Frame looks as:
    col1 semester quiz_sst quiz_maths
1    Yash        A        1          2
2    Yash        B        3          4
3 Mallika        A        4          6
4 Mallika        B        8          2
5  Muskan        A        9          7
6  Muskan        B        1          3
R
# importing the required librarylibrary("reshape2")  # creating a data framedata <- data.frame(col1=c('Yash', 'Yash', 'Mallika',                           'Mallika', 'Muskan', 'Muskan'),                   semester=c(rep(LETTERS[1:2],3)),                   quiz_sst=c(1, 3, 4, 8, 9, 1),                   quiz_maths=c(2, 4, 6, 2, 7, 3))  # binding the first two columns as it is # and stacking the third and fourth columnsdata_mod <- reshape2::melt(data, id.var = c('col1', 'semester'),                           variable.name = 'quiz_marks')print(data_mod)
Output
[1] "Modified DataFrame"
     col1 semester quiz_marks value
1     Yash        A   quiz_sst     1
2     Yash        B   quiz_sst     3
3  Mallika        A   quiz_sst     4
4  Mallika        B   quiz_sst     8
5   Muskan        A   quiz_sst     9
6   Muskan        B   quiz_sst     1
7     Yash        A quiz_maths     2
8     Yash        B quiz_maths     4
9  Mallika        A quiz_maths     6
10 Mallika        B quiz_maths     2
11  Muskan        A quiz_maths     7
12  Muskan        B quiz_maths     3
Picked
R DataFrame-Programs
R-DataFrame
R Language
R Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Change Color of Bars in Barchart using ggplot2 in R
Group by function in R using Dplyr
How to Change Axis Scales in R Plots?
How to Split Column Into Multiple Columns in R DataFrame?
Replace Specific Characters in String in R
How to Split Column Into Multiple Columns in R DataFrame?
Replace Specific Characters in String in R
How to filter R DataFrame by values in a column?
How to filter R dataframe by multiple conditions?
Convert Matrix to Dataframe in R