Reputation: 11376
I have a big dataframe, but small example would be like this:
mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
I want to transpose the dataframe and maintain the column 1 (A) as column heading ( letter[1:10]) as variable names. The following are scratch trials of unsuccessful codes.
tmydf = data.frame(t(mydf))
names(tmydf) <- tmydf[1,]
Thanks;
Upvotes: 41
Views: 72559
Reputation: 26238
One more way using janitor::row_to_names()
with dplyr
/magrittr
pipes
mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
library(janitor, warn.conflicts = F)
library(dplyr, warn.conflicts = F)
mydf %>% t %>% as.data.frame() %>% row_to_names(1)
#> a b c d e f g h i j
#> M1 11 12 13 14 15 16 17 18 19 20
#> M2 31 32 33 34 35 36 37 38 39 40
#> M3 41 42 43 44 45 46 47 48 49 50
Created on 2021-06-17 by the reprex package (v2.0.0)
Upvotes: 6
Reputation: 1118
You can use the pivot_longer
and pivot_wider
functions from the tidyr
package.
library(tidyr)
mydf%>%
pivot_longer(cols=c(-A),names_to="Original_Vars")%>%
pivot_wider(names_from=c(A))
The pivot_longer
makes a column called "Original_Vars", and a new column called value
. If you stopped here, you'd have a row for each combination of your A
variable, your "Original_Vars" (being M1, M2, and M3 here), and the value associated with that pairing.
The pivot_wider
then takes all your values from the "A" column and turns them into columns, using the values from the value
column we created with pivot_longer
to fill in.
Upvotes: 8
Reputation: 499
Data.table variante from Ramnath with indicating in string the variable name wanted.
mydf <- data.table(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
tmydf <- setNames(data.table(t(mydf[,-"A"])), mydf[["A"]])
Upvotes: 1
Reputation: 55715
Here is one way
tmydf = setNames(data.frame(t(mydf[,-1])), mydf[,1])
Upvotes: 82
Reputation: 173657
Something like this perhaps:
tmp <- as.data.frame(t(mydf[,-1]))
> colnames(tmp) <- mydf$A
> tmp
a b c d e f g h i j
M1 11 12 13 14 15 16 17 18 19 20
M2 31 32 33 34 35 36 37 38 39 40
M3 41 42 43 44 45 46 47 48 49 50
Upvotes: 10