在R中,t()
函数实际上是指矩阵。当我尝试用t()
移动我的tibble时,我最终得到了一个矩阵。矩阵不能与tibble()
组成一个矩阵。我最终花时间将列名存储为变量并附加它们,因为我尝试重新制作我的tibble的转置版本。
问题:转换tibble的最简单方法是什么,第一列应该成为新tibble的列名,旧列名将成为我新tibble的第一列。
答案 0 :(得分:17)
正如索托斯提到的那样,你只需要重新声明你的矩阵作为一个东西:
as_tibble(cbind(nms = names(df), t(df)))
答案 1 :(得分:8)
此处的解决方案:https://stackoverflow.com/a/28917212/3880322
library(dplyr)
library(tidyr)
df %>%
gather(key = var_name, value = value, 2:ncol(df)) %>%
spread_(key = names(df)[1],value = 'value')
答案 2 :(得分:5)
我遇到了同样的问题并尝试了上述所有解决方案,并意识到其中没有一个实际上保留了列的名称。
在我看来,这是一个更好的方法:
# attaching needed libraries
library(dplyr)
library(data.table)
library(tibble)
# defining the dataframe
df <- cbind.data.frame(x = rnorm(10), y = rnorm(10))
# custom function to transpose while preserving names
transpose_df <- function(df) {
t_df <- data.table::transpose(df)
colnames(t_df) <- rownames(df)
rownames(t_df) <- colnames(df)
t_df <- t_df %>%
tibble::rownames_to_column(df = .) %>%
tibble::as_data_frame(x = .)
return(t_df)
}
# using the function
transpose_df(df)
#> # A tibble: 2 x 11
#> rowname `1` `2` `3` `4` `5` `6` `7` `8` `9`
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 x -1.38 0.752 1.22 0.296 -0.00298 1.50 -0.719 -0.503 -0.114
#> 2 y 0.618 0.304 -0.0559 -1.27 0.0806 0.156 0.522 0.677 0.532
#> # ... with 1 more variable: `10` <dbl>
由reprex package(v0.2.0)创建于2018-02-17。