将保持第一列的数据帧转换为标题

时间:2011-11-01 17:14:36

标签: r dataframe transpose

我有一个很大的数据框,但小例子就是这样:

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))

我想转置数据框并将列1(A)维护为列标题(字母[1:10])作为变量名称。以下是不成功代码的临时试验。

tmydf = data.frame(t(mydf))
names(tmydf) <- tmydf[1,]

感谢;

5 个答案:

答案 0 :(得分:48)

这是一种方式

tmydf = setNames(data.frame(t(mydf[,-1])), mydf[,1])

答案 1 :(得分:6)

或许这样的事情:

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

答案 2 :(得分:1)

来自Ramnath的Data.table variante,在字符串中指示变量名称。

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"]])

答案 3 :(得分:0)

您可以使用 pivot_longer 包中的 pivot_widertidyr 函数。

library(tidyr)
mydf%>%
  pivot_longer(cols=c(-A),names_to="Original_Vars")%>%
  pivot_wider(names_from=c(A))

pivot_longer 生成一个名为“Original_Vars”的列,以及一个名为 value 的新列。如果您停在此处,您的 A 变量、“Original_Vars”(此处为 M1、M2 和 M3)以及与该配对关联的值的每个组合都会对应一行。

pivot_wider 然后从“A”列中获取所有值并将它们转换为列,使用我们使用 value 创建的 pivot_longer 列中的值进行填充。< /p>

答案 4 :(得分:0)

另一种使用 janitor::row_to_names()dplyr/magrittr 管道的方法

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

reprex package (v2.0.0) 于 2021 年 6 月 17 日创建