rdataframerbind

Is there a way to stack dataframes in an rbind fashion where there is a single different column name in R


Is there a way to stack dataframes in a row wise fashion. Consider the following code

motors <- c("audi", "honda", "ford")
age <- c(1, 2, 3)

motors1 <- motors
age1 <- c(2, 3, 1)

dat1 <- data.frame(motors, age)
dat2 <- data.frame(motors1, age1)

I would like to perform a rbind() type operation on dat1 and dat2 but this wont work as "motors" column in dat1 and "motors2" in dat2 are different.

Is there a way to perform this operation the to combine the two dataframes into 1 so there is still 2 columns of data but 8 rows of data (including column names).


Solution

  • Set the names of dat2 to those of dat1 and include the names of dat1 and 2 in it.

    rbind(rbind(names(dat1), dat1), setNames(rbind(names(dat2), dat2), names(dat1)))
    #   motors  age
    #1  motors  age
    #2    audi    1
    #3   honda    2
    #4    ford    3
    #5 motors1 age1
    #6    audi    2
    #7   honda    3
    #8    ford    1
    

    In case just to stack it without including the colnames either rename the colnames or use c in Map and convert it in a data.frame with list2DF.

    rbind(dat1, setNames(dat2, names(dat1)))
    #  motors age
    #1   audi   1
    #2  honda   2
    #3   ford   3
    #4   audi   2
    #5  honda   3
    #6   ford   1
    
    list2DF(Map(c, dat1, dat2))
    #  motors age
    #1   audi   1
    #2  honda   2
    #3   ford   3
    #4   audi   2
    #5  honda   3
    #6   ford   1
    

    Have also a look at rbind dataframes with a different column name and Simplest way to get rbind to ignore column names.