Is there a quick way (part of the tidyverse
API perhaps) to turn a row into column names for a data.frame
or tibble
, somewhat similar to tibble::column_to_rownames
?
I realize there are many ways to do this, e.g. somewhat clumsily:
> df <- head(iris)
>
> df %>%
+ set_colnames(magrittr::extract(., 1,)) %>%
+ magrittr::extract(-1,)
5.1 3.5 1.4 0.2 1
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Method 1: Using row. row.name() function is used to set and get the name of the DataFrame. Apply the row.name() function to the copy of the DataFrame and a name to the column which contains the name of the column with the help of the $ sign.
Convert the row into column names by using colnames function and subsetting the data frame.
The transpose() function is used to transpose index and columns. Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa.
janitor::row_to_names()
implements this:
library(tidyverse)
iris %>%
head() %>%
janitor::row_to_names(1)
#> 5.1 3.5 1.4 0.2 1
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
Created on 2019-05-29 by the reprex package (v0.2.1)
Well, you can simply: colnames(df) <- as.character(df[1, ])
And if you want to remove this first row: df <- df[-1,]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With