What is the best way to transpose a data.frame in R and to set one of the columns to be the header for the new transposed table?

Well you could do it in 2 steps by using

# Transpose table YOU WANT
fooData.T <- t(fooData[,2:ncol(fooData)])

# Set the column headings from the first column in the original table
colnames(fooData.T) <- fooData[,1] 

The result being a matrix which you're probably aware of, that's due to class issues when transposing. I don't think there will be a single line way to do this given the lack of naming abilities in the transpose step.


Here are my two cents using dplyr for a data.frame that has grouping columns and an id column.

id_transpose <- function(df, id){
  df %>% 
    ungroup() %>% 
    select(where(is.numeric)) %>% 
    t() %>% 
    as_tibble() %>% 
    setNames(., df %>% pull({{id}}))
}

You can do it even in one line:

fooData.T <- setNames(data.frame(t(fooData[,-1])), fooData[,1])

There are already great answers. However, this answer might be useful for those who prefer brevity in code.