首页 > 解决方案 > 用 R 中每行的频率和百分比创建一个表

问题描述

我的数据集中有以下数据:

Country <- c("ARG","BR","US","PY","SZ","SP","PT")
Gender <- c("MALE","FEMALE","MALE","MALE","FEMALE","MALE","FEMALE")

我想创建一个这样的表:

| Country | n Male | % Male | n Female | % Female |
| --------| ------------------------------------- |
| ARG     | 1543   | 5,42%  |    1741  | 6,01%    |
| BR      | 1980   | 8,49%  |    1320  | 4,51%    |

我试过使用 CrossTable 但不一样。我怎样才能做到这一点?

标签: r

解决方案


使用 data.table 的一种方法:

library(data.table)

dt <- data.table( Country = c("ARG", "ARG", "BR", "US", "PY", "SZ", "SP", "PT"),
                  Gender  = c("MALE", "MALE", "FEMALE", "MALE", "MALE", "FEMALE", "MALE", "FEMALE"))

dt[ , .(n_male     = sum(Gender == "MALE"), 
        pct_male   = sum(Gender == "MALE") / nrow(dt), 
        n_female   = sum(Gender == "FEMALE"), 
        pct_female = sum(Gender == "FEMALE") / nrow(dt)),
   by = .(Country)]

#>    Country n_male pct_male n_female pct_female
#> 1:     ARG      2    0.250        0      0.000
#> 2:      BR      0    0.000        1      0.125
#> 3:      US      1    0.125        0      0.000
#> 4:      PY      1    0.125        0      0.000
#> 5:      SZ      0    0.000        1      0.125
#> 6:      SP      1    0.125        0      0.000
#> 7:      PT      0    0.000        1      0.125

推荐阅读