change data.frame column into rows in R

Travis picture Travis · Sep 8, 2011 · Viewed 69.3k times · Source
A <- c(1,6)
B <- c(2,7)
C <- c(3,8)
D <- c(4,9)
E <- c(5,0)
df <- data.frame(A,B,C,D,E)
df
  A B C D E
1 1 2 3 4 5
2 6 7 8 9 0

I would like to have this:

df
   1  2
A  1  6 
B  2  7
C  3  8
D  4  9    
E  5  0

Answer

adamleerich picture adamleerich · Sep 8, 2011

If your dataframe is truly in that format, then all of your vectors will be character vectors. Or, you basically have a character matrix and you could do this:

data.frame(t(df))

It would be better, though, to just define it the way you want it from the get-go

df <- data.frame(c('A','B','C','D','E'), 
                 c(1, 2, 3, 4, 5),
                 c(6, 7, 8, 9, 0))

You could also do this

df <- data.frame(LETTERS[1:5], 1:5, c(6:9, 0))

If you wanted to give the columns names, you could do this

df <- data.frame(L = LETTERS[1:5], N1 = 1:5, N2 = c(6:9, 0))

Sometimes, if I use read.DIF of Excel data the data gets transposed. Is that how you got the original data in? If so, you can call

read.DIF(filename, transpose = T)

to get the data in the correct orientation.