[英]Convert Data Table Columns to Rows to Create Presentable Tables in R
嗨,当我继续尝试学习 R 时,我无法理解如何整理我的数据。 所以最后我很想有一张像这样的桌子。 (省略平均值和改进列)
这是我目前拥有的数据表:
group = c("Group 1", "Group 2", "Group 3", "Group 4", "Group 5",
"Group 6", "Group 7", "Group 8", "Group 9"),
yes = c("9", "9", "9", "12", "12", "12", "10", "10", "10"),
no = c("9", "9", "9", "6", "6", "6", "8", "8", "8"),
perc = c(0.5, 0.5, 0.5, 0.67, 0.67, 0.67, 0.56, 0.56, 0.56))
dt
group yes no perc
1: Group 1 9 9 0.50
2: Group 2 9 9 0.50
3: Group 3 9 9 0.50
4: Group 4 12 6 0.67
5: Group 5 12 6 0.67
6: Group 6 12 6 0.67
7: Group 7 10 8 0.56
8: Group 8 10 8 0.56
9: Group 9 10 8 0.56
但是,我希望它重新格式化,我可以让“是”和“否”列成为“响应”列名和 perc 列下的行,这表示说“是”的人的百分比也成为“响应”行之后的最后一行
Response Group 1 Group 2 Group 3 Group 4 Group 5...
yes 9 9 9 12 12
no 9 9 9 6 6
per 0.50 0.50 0.50 0.67 0.67
对此的任何帮助将不胜感激! 谢谢!
您正在使用data.table
因此您可以这样做:
transpose(dt,keep.names = 'Response',make.names = 'group')
Response Group 1 Group 2 Group 3 Group 4 Group 5 Group 6 Group 7 Group 8 Group 9
1: yes 9 9 9 12 12 12 10 10 10
2: no 9 9 9 6 6 6 8 8 8
3: perc 0.5 0.5 0.5 0.67 0.67 0.67 0.56 0.56 0.56
Note that if you have other libraries loaded eg purrr
ensure to load transpose
from the data.table
package using the scope resolution operator ie data.table::transpose(...)
这是 tidyverse 解决方案:
library(dplyr)
library(tidyr)
dt %>%
pivot_longer(c(yes, no, perc),
names_to = "key",
values_to = "val",
values_transform = list(val = as.character)
) %>%
pivot_wider(names_from = group, values_from = val) %>%
mutate(across(-key, as.numeric))
key `Group 1` `Group 2` `Group 3` `Group 4` `Group 5` `Group 6` `Group 7` `Group 8` `Group 9`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 yes 9 9 9 12 12 12 10 10 10
2 no 9 9 9 6 6 6 8 8 8
3 perc 0.5 0.5 0.5 0.67 0.67 0.67 0.56 0.56 0.56
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.