【发布时间】:2022-01-10 20:31:17
【问题描述】:
我正在使用 R。我有以下三个数据集:
set.seed(123)
v1 <- c("2010-2011","2011-2012", "2012-2013", "2013-2014", "2014-2015")
v2 <- c("A", "B", "C", "D", "E")
v3 <- c("Z", "Y", "X", "W" )
data_1 = data.frame(var_1 = rnorm(871, 10,10), var_2 = rnorm(871, 5,5))
data_1$dates <- as.factor(sample(v1, 871, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_1$types <- as.factor(sample(v2, 871, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_1$types2 <- as.factor(sample(v3, 871, replace=TRUE, prob=c(0.3, 0.5, 0.1, 0.1)))
data_2 = data.frame(var_1 = rnorm(412, 10,10), var_2 = rnorm(412, 5,5))
data_2$dates <- as.factor(sample(v1, 412, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_2$types <- as.factor(sample(v2, 412, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_2$types2 <- as.factor(sample(v3, 412, replace=TRUE, prob=c(0.3, 0.5, 0.1, 0.1)))
data_3 = data.frame(var_1 = rnorm(332, 10,10), var_2 = rnorm(332, 5,5))
data_3$dates <- as.factor(sample(v1, 332, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_3$types <- as.factor(sample(v2, 332, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_3$types2 <- as.factor(sample(v3, 332, replace=TRUE, prob=c(0.3, 0.5, 0.1, 0.1)))
我将这3个数据集结合起来,做了如下列联表:
data_1 <- data.frame(name="data_1", data_1)
data_2 <- data.frame(name="data_2", data_2)
data_3 <- data.frame(name="data_3", data_3)
problem_data <- rbind(data_1, data_2, data_3)
summary <- xtabs(~dates+name+types+types2, problem_data)
t = ftable(summary, row.vars=1, col.vars=2:4)
最后,使用“memisc”库,我能够使用“show_html()”函数“发布”这个表:
library(memisc)
show_html(t)
在上表中,我想为每个垂直组合添加一行“总计”(例如 A,W , A,X, , A,Y, , A,Z, B,W, . ..)
我知道如何生成所有这些总计:
library(dplyr)
#column of totals
totals = problem_data %>%
group_by(name, types, types2) %>%
summarise(totals = n())
`summarise()` has grouped output by 'name', 'types'. You can override using the `.groups` argument.
# A tibble: 60 x 4
# Groups: name, types [15]
name types types2 totals
<chr> <fct> <fct> <int>
1 data_1 A W 26
2 data_1 A X 29
3 data_1 A Y 172
4 data_1 A Z 104
5 data_1 B W 27
6 data_1 B X 20
7 data_1 B Y 111
8 data_1 B Z 48
9 data_1 C W 12
10 data_1 C X 10
# ... with 50 more rows
这些也可以转置以使其更容易:
library(data.table)
transpose(totals)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27
1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_1 data_2 data_2 data_2 data_2 data_2 data_2 data_2
2 A A A A B B B B C C C C D D D D E E E E A A A A B B B
3 W X Y Z W X Y Z W X Y Z W X Y Z W X Y Z W X Y Z W X Y
4 26 29 172 104 27 20 111 48 12 10 64 32 12 10 43 33 15 9 56 38 13 14 80 54 9 12 56
V28 V29 V30 V31 V32 V33 V34 V35 V36 V37 V38 V39 V40 V41 V42 V43 V44 V45 V46 V47 V48 V49 V50 V51 V52 V53 V54
1 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_2 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3 data_3
2 B C C C C D D D D E E E E A A A A B B B B C C C C D D
3 Z W X Y Z W X Y Z W X Y Z W X Y Z W X Y Z W X Y Z W X
4 35 5 4 25 18 3 2 16 14 8 4 27 13 6 11 62 48 7 12 38 24 6 2 20 8
6 5
V55 V56 V57 V58 V59 V60
1 data_3 data_3 data_3 data_3 data_3 data_3
2 D D E E E E
3 Y Z W X Y Z
4 19 14 7 3 27 7
但是有人可以告诉我如何将这些总数添加到前面列联表“t”的底行吗?有没有办法直接使用“xtabs”和“ftable”命令来做到这一点?
谢谢!
【问题讨论】:
标签: r dplyr datatable data-manipulation