在R中使用dplyr将第一行作为我的数据框的列名

时间:2018-10-07 00:12:49

标签: r dplyr

这是我的数据框:

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

colnames(x)<-NULL

我想移置(t(x))并将x的第一列视为新数据帧t(x)的列名。

我还需要将它们(t(x)的姓氏)识别为单词/字母(如字符正确吗?)

是否可以使用dplyr软件包执行此操作?

有帮助吗?

5 个答案:

答案 0 :(得分:2)

您可以在基数R中轻松地做到这一点。只需将x的第一列作为行名,然后删除第一列并转置即可。

row.names(x) = x[,1]
x = t(x[,-1])
x
    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

答案 1 :(得分:2)

尝试一下:

library(dplyr)
library(tidyr)

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

x %>% 
  gather(key = key, value = value, 2:ncol(x)) %>% 
  spread(key = names(x)[1], value = "value")
  key  a  b  c  d  e  f  g  h  i  j
1  M1 11 12 13 14 15 16 17 18 19 20
2  M2 31 32 33 34 35 36 37 38 39 40
3  M3 41 42 43 44 45 46 47 48 49 50

答案 2 :(得分:1)

使用rownames_to_column()软件包中的tibble

library(magrittr)
library(tibble)

x %>%
  t() %>%
  as.data.frame(stringsAsFactors = FALSE) %>%
  rownames_to_column() %>%
  `colnames<-`(.[1,]) %>%
  .[-1,] %>%
  `rownames<-`(NULL)
#>    A  a  b  c  d  e  f  g  h  i  j
#> 1 M1 11 12 13 14 15 16 17 18 19 20
#> 2 M2 31 32 33 34 35 36 37 38 39 40
#> 3 M3 41 42 43 44 45 46 47 48 49 50

x %>% 
  `row.names<-`(.[, 1]) %>% 
  t() %>%
  as.data.frame(stringsAsFactors = FALSE) %>% 
  .[-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(v0.2.1.9000)于2018-10-06创建

答案 3 :(得分:1)

我认为column_to_rownames软件包中的tibble是您最简单的解决方案。在与t换位之前使用它。

library(magrittr)
library(tibble)

x %>% 
  column_to_rownames("A") %>% 
  t

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

上面的“ M1”,“ M2”,“ M3”是行名。如果您希望将它们保留在内部(作为一列),则可以从同一包中添加rownames_to_column

x %>% 
  column_to_rownames("A") %>% 
  t %>% 
  as.data.frame %>% 
  rownames_to_column("key")

#>   key  a  b  c  d  e  f  g  h  i  j
#> 1  M1 11 12 13 14 15 16 17 18 19 20
#> 2  M2 31 32 33 34 35 36 37 38 39 40
#> 3  M3 41 42 43 44 45 46 47 48 49 50

从本质上讲,
column_to_rownames("A")x中的“ A”列转换为行名,
t转置data.frame(现在是矩阵),
as.data.frame将其重新分类为data.frame(下一个功能必需),并且
rownames_to_column("key")将行名称转换为名为“键”的新列。

答案 4 :(得分:0)

{janitor} 包对此很有用,并且足够灵活,可以选择任何行来推送到列名:


library(tidyverse)
library(janitor)

x <- x %>% row_to_names(row_number = 1)