向意外事件添加行 Table
Adding Rows To a Contingency Table
我用的是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个数据集,做了如下的应急table:
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()”函数“发布”这个table:
library(memisc)
show_html(t)
在上面的table中,我想为每个垂直组合(例如 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
但是有人可以告诉我如何将这些总数添加到早期意外事件 table“t”的底行吗?有没有办法直接使用“xtabs”和“ftable”命令来做到这一点?
谢谢!
您可以在 rbind(your_ftable, total = ...)
之前完成。这将在 your_ftable
的最后一行之后创建一个名为 total
的行。例如,
summary <- xtabs(~dates+name+types+types2, problem_data)
t <- ftable(summary, row.vars=1, col.vars=2:4)
totals <- problem_data %>% group_by(name, types, types2) %>% summarise(totals = n())
memisc::show_html(rbind(t, totals = totals$totals), varinfront = FALSE)
给予
进一步阅读:https://cran.r-project.org/web/packages/memisc/vignettes/ftable-matrix.html
使用group_by
需要一个人来弄清楚变量出现的顺序。相反,我更愿意使用 addmargins
函数。这将边距添加到数据中。唯一的技巧是更改属性:
v <- attributes(t)
result <- addmargins(t, 1) #Adds the totals
v$row.vars[[1]] <- c(v$row.vars[[1]], 'Total')
v$dim <- dim(result)
attributes(result) <- v
memisc::show_html(result)
我用的是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个数据集,做了如下的应急table:
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()”函数“发布”这个table:
library(memisc)
show_html(t)
在上面的table中,我想为每个垂直组合(例如 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
但是有人可以告诉我如何将这些总数添加到早期意外事件 table“t”的底行吗?有没有办法直接使用“xtabs”和“ftable”命令来做到这一点?
谢谢!
您可以在 rbind(your_ftable, total = ...)
之前完成。这将在 your_ftable
的最后一行之后创建一个名为 total
的行。例如,
summary <- xtabs(~dates+name+types+types2, problem_data)
t <- ftable(summary, row.vars=1, col.vars=2:4)
totals <- problem_data %>% group_by(name, types, types2) %>% summarise(totals = n())
memisc::show_html(rbind(t, totals = totals$totals), varinfront = FALSE)
给予
进一步阅读:https://cran.r-project.org/web/packages/memisc/vignettes/ftable-matrix.html
使用group_by
需要一个人来弄清楚变量出现的顺序。相反,我更愿意使用 addmargins
函数。这将边距添加到数据中。唯一的技巧是更改属性:
v <- attributes(t)
result <- addmargins(t, 1) #Adds the totals
v$row.vars[[1]] <- c(v$row.vars[[1]], 'Total')
v$dim <- dim(result)
attributes(result) <- v
memisc::show_html(result)