使用第一列条目转换数据框中的行和列作为新R数据框中的同名

时间:2018-02-18 18:10:51

标签: r dataframe row

我的数据框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列,所以使用强力交换行和列并不是那么简单。

我很难过,并会感激任何提示。是的,我需要数据框中的数据。

为格式化道歉,但我仍然试图熟悉该网站。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

希望这有帮助!

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