如何使用 dplyr 在 R 中转置数据框?

RL_*_*Pug 4 r dplyr

我正在尝试解决这个问题,但我无法让任何事情发挥作用。

这是我的数据框。


Type   Claims   Adds   Family   Individual   ES     SO
A       0         10     1          9         6      4         
B       0         17     1          9         2      6      
C       2         16     2          5         6      4
D       6         15     1          6         6      4
E       7         12     3          9         8      6
Run Code Online (Sandbox Code Playgroud)

我的目标是变成这样

Type             A      B    C     D    E
Claims           0      0    2     6    7
Adds             10     17   16    15   12
Family           1      1    2     1    3
Individuals      9      9    5     6    9
ES               6      2    6     6    8
SO               4      6    4     4    6
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用转置(数据),但结果是错误的。

jay*_*.sf 7

使用t, 给出一个矩阵,因此as.data.frame.

library(dplyr)
dat[-1] %>% t() %>% as.data.frame() %>% setNames(dat[,1])
#             A  B  C  D  E
# Claims      0  0  2  6  7
# Adds       10 17 16 15 12
# Family      1  1  2  1  3
# Individual  9  9  5  6  9
# ES          6  2  6  6  8
# SO          4  6  4  4  6
Run Code Online (Sandbox Code Playgroud)

或没有dplyr

setNames(as.data.frame(t(dat[-1])), dat[,1])
#             A  B  C  D  E
# Claims      0  0  2  6  7
# Adds       10 17 16 15 12
# Family      1  1  2  1  3
# Individual  9  9  5  6  9
# ES          6  2  6  6  8
# SO          4  6  4  4  6
Run Code Online (Sandbox Code Playgroud)

编辑

要将行名作为列获取,请执行以下操作:tibble::rownames_to_column

dat[-1] %>% t() %>% as.data.frame() %>% setNames(dat[,1]) %>% 
  tibble::rownames_to_column("xyz")
#          xyz  A  B  C  D  E
# 1     Claims  0  0  2  6  7
# 2       Adds 10 17 16 15 12
# 3     Family  1  1  2  1  3
# 4 Individual  9  9  5  6  9
# 5         ES  6  2  6  6  8
# 6         SO  4  6  4  4  6
Run Code Online (Sandbox Code Playgroud)

或不带包:

setNames(data.frame(names(dat)[-1], unname(t(dat[-1]))), c("xyz", dat[,1]))
#          xyz  A  B  C  D  E
# 1     Claims  0  0  2  6  7
# 2       Adds 10 17 16 15 12
# 3     Family  1  1  2  1  3
# 4 Individual  9  9  5  6  9
# 5         ES  6  2  6  6  8
# 6         SO  4  6  4  4  6
Run Code Online (Sandbox Code Playgroud)

数据:

dat <- structure(list(Type = c("A", "B", "C", "D", "E"), Claims = c(0L, 
0L, 2L, 6L, 7L), Adds = c(10L, 17L, 16L, 15L, 12L), Family = c(1L, 
1L, 2L, 1L, 3L), Individual = c(9L, 9L, 5L, 6L, 9L), ES = c(6L, 
2L, 6L, 6L, 8L), SO = c(4L, 6L, 4L, 4L, 6L)), class = "data.frame", row.names = c(NA, 
-5L))
Run Code Online (Sandbox Code Playgroud)