r - 如何使用 dplyr 在 R 中转置数据帧?

我正在尝试解决这个问题,但我什么也做不了。

这是我的数据框。


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

我的目标是变成这样

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

我一直在尝试使用 transpose(data) 但结果是错误的。

最佳答案

使用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

或没有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

编辑

要将行名作为列,可以使用 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

或没有包:

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

数据:

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

https://stackoverflow.com/questions/65427678/

相关文章:

git - 如何为 gerrit 事件配置 Gerrit Webhooks

r - 如何检查 data.table 各行中的值是否相同

python - 根据所选列过滤重复的行并与 Pandas 中的另一个数据框进行比较

python - 将 dict 值设置为自身会创建无限副本

python - , 运算符用在条件语句的右侧时有何作用?

amazon-web-services - Amazon RDS 和 VPC 端点连接

python - 从多列的 value_counts 中排除项目

firebase - Flutter Firestore 离线数据库

windows - 使 HTML 不适用于 Windows 10 中的 Sphinx 文档

python - 从 python 列表创建子列表