[英]How to transpose a dataframe in tidyverse?
Using basic R, I can transpose a dataframe, say mtcars
, which has all columns of the same class:使用基本的 R,我可以转置一个数据帧,比如
mtcars
,它具有同一类的所有列:
as.data.frame(t(mtcars))
Or with pipes:或使用管道:
library(magrittr)
mtcars %>% t %>% as.data.frame
How to accomplish the same within tidyr or tidyverse packages?如何在 tidyr 或 tidyverse 包中完成相同的任务?
My attempt below gives:我在下面的尝试给出了:
Error: Duplicate identifiers for rows
错误:行标识符重复
library(tidyverse)
mtcars %>% gather(var, value, everything()) %>% spread(var, value)
Try with add_rownames
尝试使用
add_rownames
add_rownames(mtcars) %>%
gather(var, value, -rowname) %>%
spread(rowname, value)
In the newer version, rownames_to_column
replaces add_rownames
在较新的版本,
rownames_to_column
取代add_rownames
mtcars %>%
rownames_to_column %>%
gather(var, value, -rowname) %>%
spread(rowname, value)
In the even newer version, pivot_wider
replaces spread
:在更新的版本中,
pivot_wider
替换了spread
:
mtcars %>%
tibble::rownames_to_column() %>%
pivot_longer(-rowname) %>%
pivot_wider(names_from=rowname, values_from=value)
There's now a purpose-built function to do this, rotate_df()
from sjmisc
.现在有一个专门构建的函数,来自
sjmisc
rotate_df()
。
library(sjmisc)
mtcars %>% rotate_df()
# Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant Duster 360
#mpg 21.00 21.000 22.80 21.400 18.70 18.10 14.30
#cyl 6.00 6.000 4.00 6.000 8.00 6.00 8.00
#disp 160.00 160.000 108.00 258.000 360.00 225.00 360.00
#hp 110.00 110.000 93.00 110.000 175.00 105.00 245.00
#drat 3.90 3.900 3.85 3.080 3.15 2.76 3.21
#etc
The function also allows you to convert rownames to real df data with the rotate.该函数还允许您通过旋转将行名转换为真实的 df 数据。 Many thanks to the package creators.
非常感谢包的创建者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.