Search code examples
rreshape2melt

melt() is using all column names as id variables


So, with ths dummy dataset

test_species <- c("a", "b", "c", "d", "e")
test_abundance <- c(4, 7, 15, 2, 9)
df <- rbind(test_species, test_abundance)
df <- as.data.frame(df)
colnames(df) <- c("a", "b", "c", "d", "e")
df <- dplyr::slice(df, 2)

we get a dataframe that's something like this:

a     b     c     d     e    
4     7     15    2     9 

I'd like to transform it into something like

species      abundance
a            4
b            7
c            15
d            2
e            9

using the reshape2 function melt(). I tried the code

melted_df <- melt(df,
              variable.name = "species", 
              value.name = "abundance")

but that tells me: "Using a, b, c, d, e as id variables", and the end result looks like this:

a     b     c     d     e    
4     7     15    2     9 

What am I doing wrong, and how can I fix it?


Solution

  • Rbind is adding some odd behaviour I think, I cannot explain why.

    A fairly basic fix is:

    test_species <-c("a", "b", "c", "d", "e")
    test_abundance <- c(4, 7, 15, 2, 9)
    df <- data.frame(test_species, test_abundance) #skip rbind and go straight to df
    colnames(df) <- c('species', 'abundance') #colnames correct
    

    This skips the rbind function and will give desired outcome.