将频率计数添加到2x2属性表

时间:2019-09-24 17:46:06

标签: r dplyr

如何将频率计数添加到2x2属性表中?因此,这里的“数据集”包含两个类别变量。

 dataset %>% prop.table(margin = 2) %>% '*' (100) %>% round(2)

除每个类别的百分比外,我还希望计数。

对不起,我们对此感到抱歉,但是看起来并不需要这样,除了不需要在每个单元格中报告总和。

enter image description here

2 个答案:

答案 0 :(得分:0)

可重现的示例和解决方案:

tab <-iris %>% mutate(size = factor(1+(Sepal.Length>median(iris$Sepal.Length)),levels = 1:2, labels = c('S','L'))) %>%
  select(Species, size) %>%
  table()
prop <- prop.table(tab,margin = 2) %>% '*' (100) %>% round(2)

matrix(paste(tab,prop),nrow = nrow(tab),dimnames = dimnames(tab))

给予

            size
Species      S         L         
  setosa     "50 62.5" "0 0"     
  versicolor "24 30"   "26 37.14"
  virginica  "6 7.5"   "44 62.86"

或其他解决方案:

iris %>% mutate(size = factor(1+(Sepal.Length>median(iris$Sepal.Length)),levels = 1:2, labels = c('S','L'))) %>%
  group_by(Species, size) %>%
  summarise(n = n()) %>%
  group_by(size) %>%
  mutate(p = paste(n,round(n/sum(n)*100,2))) %>%
  select(-n) %>%
  spread(size,p,fill = paste(0,0))

给予

# A tibble: 3 x 3
  Species    S       L       
  <fct>      <chr>   <chr>   
1 setosa     50 62.5 0 0     
2 versicolor 24 30   26 37.14
3 virginica  6 7.5   44 62.86

答案 1 :(得分:0)

addmargins应用于您的表可能会满足您的要求。

set.seed(34)
n <- 20
tab <- table(sample(1:3, n, replace = TRUE), sample(c("A", "B"), n, replace = TRUE))
addmargins(tab)