contingency table in R

manually

pg %>% 
  drop_na() %>% 
  group_by(species, sex) %>% 
  tally () %>% 
  pivot_wider(names_from = sex, values_from = n) %>% 
  mutate(female_freq = round(female/(female+male),2),
         male_freq = 1 - female_freq)
## # A tibble: 3 x 5
## # Groups:   species [3]
##   species   female  male female_freq male_freq
##   <fct>      <int> <int>       <dbl>     <dbl>
## 1 Adelie        73    73        0.5       0.5 
## 2 Chinstrap     34    34        0.5       0.5 
## 3 Gentoo        58    61        0.49      0.51

rstatix

pg %>% 
  drop_na() %>% 
  rstatix::freq_table(species, sex) %>% 
  pivot_wider(names_from = sex, values_from = c(n, prop))
## # A tibble: 3 x 5
##   species   n_female n_male prop_female prop_male
##   <fct>        <int>  <int>       <dbl>     <dbl>
## 1 Adelie          73     73        50        50  
## 2 Chinstrap       34     34        50        50  
## 3 Gentoo          58     61        48.7      51.3