【问题标题】:Transpose rows and columns in data frame using first column entries as colnames in new R data frame使用第一列条目作为新 R 数据框中的列名来转置数据框中的行和列
【发布时间】:2018-07-29 00:40:31
【问题描述】:

我的数据框 df 如下所示:

      ID     A   B   C    D...Z
1   name1    4   6   7    8...
2   name2    5   8   3    5...
...
50 name50    4   6   7    8...

这是我需要的:

   ID   name1   name2 ...name50 
1  A      4      5    ...  4
2  B      6      8    ...  6
etc.

我尝试了转置命令as.data.frame(t(df)),但行的索引号 (1,2,...50) 变成了我不想要的列名。 我想使用旧数据框中的第一列(name1name2,...)作为新数据框的列名。 我还丢失了我需要的行的索引号。

主要问题是df 有大约 15k 行和 45 列,因此使用暴力交换行和列并不是那么简单。

是的,我需要数据框中的数据。

【问题讨论】:

    标签: r dataframe row


    【解决方案1】:
    library(tibble)
    library(dplyr)
    
    df %>%
      t() %>%
      as.data.frame(stringsAsFactors = F) %>%
      rownames_to_column("value") %>%
      `colnames<-`(.[1,]) %>%
      .[-1,] %>%
      `rownames<-`(NULL)
    

    输出是:

      ID name1 name2 name50
    1  A     4     5      4
    2  B     6     8      6
    3  C     7     3      7
    4  D     8     5      8
    

    样本数据:

    df <- structure(list(ID = c("name1", "name2", "name50"), A = c(4L, 
    5L, 4L), B = c(6L, 8L, 6L), C = c(7L, 3L, 7L), D = c(8L, 5L, 
    8L)), .Names = c("ID", "A", "B", "C", "D"), class = "data.frame", row.names = c(NA, 
    -3L))
    

    【讨论】:

      【解决方案2】:

      先将行名设置为ID列值,再转置:

      > df
            ID A B C D
      1  name1 4 6 7 8
      2  name2 5 8 3 5
      3 name50 4 6 7 8
      
      > rownames(df)<-df$ID
      
      > df$ID<-NULL
      
      > df
             A B C D
      name1  4 6 7 8
      name2  5 8 3 5
      name50 4 6 7 8
      
      > t(df)
        name1 name2 name50
      A     4     5      4
      B     6     8      6
      C     7     3      7
      D     8     5      8
      

      【讨论】:

      • 注意到旧数据框中的行列成为新数据框中的行名,但我仍然需要行的标准索引号。必须将行名添加为数据框中的新列,然后使用行名(df)
      【解决方案3】:

      您应该能够删除行号,像以前一样进行转置,然后将行号添加回:row.names(df) &lt;- 1 : nrow(df)

      【讨论】:

      • 我将上述建议与您的建议结合起来,为我的问题提供另一种解决方案。
      猜你喜欢
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多