【问题标题】:Transposing a dataframe maintaining the first column as heading转置保持第一列作为标题的数据框
【发布时间】:2011-11-01 17:14:36
【问题描述】:

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

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

我想转置数据框并将第 1 (A) 列作为列标题 ( letter[1:10]) 作为变量名称。以下是不成功代码的从头试验。

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

谢谢;

【问题讨论】:

  • 您不需要为使用冒号创建的序列调用c。所以11:20c(11:20)相同,letters[1:10]c(letters[1:10])相同。

标签: r dataframe transpose


【解决方案1】:

这是一种方法

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

【讨论】:

【解决方案2】:

可能是这样的:

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

【讨论】:

    【解决方案3】:

    您可以使用tidyr 包中的pivot_longerpivot_wider 函数。

    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”列中获取所有值并将它们转换为列,使用我们使用 pivot_longer 创建的 value 列中的值来填写。

    【讨论】:

    • 这正是我正在寻找的(一个 tidyverse 解决方案)! SO需要一种将标签添加到特定答案的方法。在这种情况下,我会选择:dplyrtidyrtidyverse
    【解决方案4】:

    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-06-17 创建

    【讨论】:

      【解决方案5】:

      来自 Ramnath 的 Data.table 变体,在字符串中指明想要的变量名。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        相关资源
        最近更新 更多