Issue with weighted percentage in `flat_table()`
realrbird opened this issue · 0 comments
realrbird commented
library(tidyverse)
library(sjmisc)
df <- mtcars %>%
mutate(cyl = as.factor(cyl), gear = as.factor(gear)) %>%
select(cyl, gear, mpg) %>%
na.omit() %>%
as_tibble()
# Using sjmisc
flat_table(df, cyl, gear, weights = mpg, margin = 'col', digits = 9)
#> gear 3 4 5
#> cyl
#> 4 9.053498 73.129252 52.336449
#> 6 16.460905 26.870748 18.691589
#> 8 74.485597 0.000000 28.971963
# using dplyr
count(df, cyl, gear, .drop = FALSE, wt = mpg) %>%
group_by(gear) %>%
mutate(n = (n/sum(n)) * 100) %>%
pivot_wider(names_from = gear, values_from = n) %>%
as.data.frame()
#> cyl 3 4 5
#> 1 4 8.899007 73.16576 52.75959
#> 2 6 16.349338 26.83424 18.42844
#> 3 8 74.751656 0.00000 28.81197
# WORKS FINE WITHOUT WEIGHTS
flat_table(df, cyl, gear, margin = 'col', digits = 9)
#> gear 3 4 5
#> cyl
#> 4 6.666667 66.666667 40.000000
#> 6 13.333333 33.333333 20.000000
#> 8 80.000000 0.000000 40.000000
count(df, cyl, gear, .drop = FALSE) %>%
group_by(gear) %>%
mutate(n = (n/sum(n)) * 100) %>%
pivot_wider(names_from = gear, values_from = n) %>%
as.data.frame()
#> cyl 3 4 5
#> 1 4 6.666667 66.66667 40
#> 2 6 13.333333 33.33333 20
#> 3 8 80.000000 0.00000 40
Created on 2022-05-12 by the reprex package (v2.0.1)