这是我的数据框:
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软件包执行此操作?
有帮助吗?
答案 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)