I'll demo a technique using mtcars
.
library(dplyr)
mtcars %>%
select(gear, am, vs) %>%
# this mutate is compensating for not having your data
mutate(across(everything(), ~ if_else(. > 0, "Yes", "No"))) %>%
pivot_longer(everything()) %>%
group_by(name, value) %>%
count() %>%
group_by(name) %>%
mutate(n = 100 * n / sum(n)) %>%
ungroup() %>%
pivot_wider(id_cols = c(name), names_from = "value", values_from = "n") %>%
mutate(across(-name, ~ coalesce(., 0)))
# # A tibble: 3 × 3
# name No Yes
# <chr> <dbl> <dbl>
# 1 am 59.4 40.6
# 2 gear 0 100
# 3 vs 56.2 43.8
I'll adjust, after retrieving your data.
library(dplyr)
library(tidyr)
ogd_research_project_csv_col_names_clean %>%
select(Opd_InstitutionWebsite,
Opd_Portal,
Opd_MobileApps,
Opd_CustomerServicePortal) %>%
pivot_longer(everything()) %>%
group_by(name, value) %>%
count() %>%
group_by(name) %>%
mutate(n = 100 * n / sum(n)) %>%
ungroup() %>%
pivot_wider(id_cols = c(name), names_from = "value", values_from = "n") %>%
# safeguard against an all-Yes or all-No category, o/w not needed
mutate(across(-name, ~ coalesce(., 0)))
# # A tibble: 4 × 3
# name No Yes
# <chr> <dbl> <dbl>
# 1 Opd_CustomerServicePortal 44.4 55.6
# 2 Opd_InstitutionWebsite 27.2 72.8
# 3 Opd_MobileApps 23.9 76.1
# 4 Opd_Portal 33.9 66.1
Reproducible data with results:
quux <- ogd_research_project_csv_col_names_clean %>%
select(Opd_InstitutionWebsite,
Opd_Portal,
Opd_MobileApps,
Opd_CustomerServicePortal) %>%
head(n=20)
# cat(deparse1(quux), "\n")
quux <- structure(list(Opd_InstitutionWebsite = c("Yes", "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "No", "Yes", "Yes", "Yes"), Opd_Portal = c("No", "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "No", "Yes", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "Yes"), Opd_MobileApps = c("No", "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "Yes"), Opd_CustomerServicePortal = c("No", "Yes", "Yes", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "Yes", "No", "No", "Yes", "No")), row.names = c(NA, 20L), class = "data.frame")
quux %>%
select(Opd_InstitutionWebsite,
Opd_Portal,
Opd_MobileApps,
Opd_CustomerServicePortal) %>%
pivot_longer(everything()) %>%
group_by(name, value) %>%
count() %>%
group_by(name) %>%
mutate(n = 100 * n / sum(n)) %>%
ungroup() %>%
pivot_wider(id_cols = c(name), names_from = "value", values_from = "n") %>%
mutate(across(-name, ~ coalesce(., 0)))
# # A tibble: 4 × 3
# name No Yes
# <chr> <dbl> <dbl>
# 1 Opd_CustomerServicePortal 40 60
# 2 Opd_InstitutionWebsite 20 80
# 3 Opd_MobileApps 30 70
# 4 Opd_Portal 40 60