首页 > 解决方案 > 使用 R 创建一个 3 路表

问题描述

我正在尝试使用 R 创建一个 3 路表。

我已经使用下面的代码来总结数据并提出一个 3 路表

3waydata <- data %>% group_by(duration, education, sex) %>%
                     summarise(count = sum(number))

然后拿出下表

with(3waydata, table(duration, sex, education)

但是我不确定如何在表中包含计数。我有我想要的结构,但不确定如何在表格中包含计数。

                           education high low medium unknown
duration             sex                                   
five-to-ten-years   female            1   1      1       1
                    male              1   1      1       1
five-years-or-less  female            1   1      1       1
                    male              1   1      1       1
more-than-ten-years female            1   1      1       1
                    male              1   1      1       1
native-born         female            1   1      1       1
                    male              1   1      1       1
unknown             female            1   1      1       1
                    male              1   1      1       1

标签: r

解决方案


要获得您想要的表格,您可以使用xtabsand ftable

with(`3waydata`, ftable(xtabs(count ~ duration + sex + education)))
#>                         education high low medium unknown
#> duration            sex                                  
#> five-to-ten-years   F                8   0     10       0
#>                     M                0   9     12      11
#> five-years-or-less  F               10  10      0       9
#>                     M                9  14     15      12
#> more-than-ten-years F               22  26     29      10
#>                     M                0  12     31       0
#> native-born         F                0   0     11       0
#>                     M               12   0      0       0
#> unknown             F                0  13      0       0
#>                     M                0  12     15      11

显然,我必须创建自己的数据,因为您没有提供自己的数据。请注意,这3waydata不是 R 中的有效变量名,因此没有用引号引起来。

set.seed(69)

data <- data.frame(education = sample(c("high","low","medium","unknown"), 30, T),
                   sex       = rep(c("M", "F"), 15),
                   duration  = sample(c("unknown", "native-born", 
                                        "five-years-or-less", "five-to-ten-years",
                                        "more-than-ten-years"), 30, T),
                   number    = rpois(30, 10))

`3waydata` <- data %>% 
              group_by(duration, education, sex) %>%
              summarise(count = sum(number))

推荐阅读