如何最好地使用 dplyr 对数据进行子集化并创建相对频率表?

How can I best use dplyr to subset data and create relative frequency tables?

我正在使用 iris 数据集来学习如何使用 dplyr,并且正在尝试创建一个相对频率 table,如下所示:

Petal.Width .1 .2 .3 .4 .5 .6 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8
Species
setosa 0.10 0.58 0.14 0.14 0.02 0.02 0 0 0 0 0 0 0 0 0
versicolor 0 0 0 0 0 0 0.14 0.06 0.10 0.26 0.14 0.02 0.20 0.04 0.06

我正在努力按物种对观察结果进行分组,然后按物种产生相对频率。

我猜它必须是使用 group_by、变异和计数的东西,但我在网上能找到的最接近的东西是:

my_data %>% 
    group_by(Petal.Width,Species) %>% 
    summarise(n = n()) %>%
    ungroup %>% 
    mutate(total = sum(n), rel.freq = n / total)

这仍然不是我想要的,因为它是观察的总数,而不是每个物种的数量。

非常感谢任何帮助!

您可以在 dplyr 中执行此操作,但它是 base R 中的一个衬里:

t(apply(table(iris$Species, iris$Petal.Width), 1, function(x) x/sum(x)))
#>             
#>              0.1  0.2  0.3  0.4  0.5  0.6    1  1.1 1.2  1.3  1.4  1.5  1.6
#>   setosa     0.1 0.58 0.14 0.14 0.02 0.02 0.00 0.00 0.0 0.00 0.00 0.00 0.00
#>   versicolor 0.0 0.00 0.00 0.00 0.00 0.00 0.14 0.06 0.1 0.26 0.14 0.20 0.06
#>   virginica  0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0 0.00 0.02 0.04 0.02
#>             
#>               1.7  1.8 1.9    2  2.1  2.2  2.3  2.4  2.5
#>   setosa     0.00 0.00 0.0 0.00 0.00 0.00 0.00 0.00 0.00
#>   versicolor 0.02 0.02 0.0 0.00 0.00 0.00 0.00 0.00 0.00
#>   virginica  0.02 0.22 0.1 0.12 0.12 0.06 0.16 0.06 0.06

reprex package (v2.0.1)

创建于 2022-02-02

是这样的吗?

虽然不确定“宽”格式;我倾向于将其保留很长时间(省略 pivot_wider 步骤)。

library(dplyr)
library(tidyr)

iris %>% 
  count(Species, Petal.Width) %>% 
  group_by(Species) %>% 
  mutate(p = n/sum(n)) %>% 
  ungroup() %>% 
  select(-n) %>% 
  pivot_wider(names_from = "Petal.Width", values_from = "p")

结果:

Species    `0.1` `0.2` `0.3` `0.4` `0.5` `0.6`   `1` `1.1` `1.2` `1.3` `1.4` `1.5` `1.6` `1.7` `1.8` `1.9`   `2` `2.1` `2.2` `2.3` `2.4` `2.5`
  <fct>      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa       0.1  0.58  0.14  0.14  0.02  0.02 NA    NA     NA   NA    NA    NA    NA    NA    NA     NA   NA    NA    NA    NA    NA    NA   
2 versicolor  NA   NA    NA    NA    NA    NA     0.14  0.06   0.1  0.26  0.14  0.2   0.06  0.02  0.02  NA   NA    NA    NA    NA    NA    NA   
3 virginica   NA   NA    NA    NA    NA    NA    NA    NA     NA   NA     0.02  0.04  0.02  0.02  0.22   0.1  0.12  0.12  0.06  0.16  0.06  0.06