我正在尝试解决这个问题,但我什么也做不了。
这是我的数据框。
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/