簡體   English   中英

虛擬分類變量的條形圖

[英]Barplot of dummy categorical variables

我的數據如下所示:

library(tidyverse)
#> Warning: package 'readr' was built under R version 4.1.2

set.seed(123)

dat <- tibble(
  mcq_option_1 = sample(c(0,1), replace = TRUE, size = 100),
  mcq_option_2 = sample(c(0,1), replace = TRUE, size = 100),
  mcq_option_3 = sample(c(0,1), replace = TRUE, size = 100),
  mcq_option_4 = sample(c(0,1), replace = TRUE, size = 100),
  mcq_option_5 = sample(c(0,1), replace = TRUE, size = 100)
)

reprex package (v2.0.1) 創建於 2022-02-21

我的目標是創建每個 mcq 選項被選中的次數的條形圖(每列中 1 的計數)。 實現這一目標最快的數據操作技術是什么? 我應該先將 pivot 變長,然后使用 mutate 創建一個新的計數變量嗎? 或者我可以在 ggplot function 中快速執行此操作嗎?

有比這更短/更好的解決方案嗎?

new <- dat %>% pivot_longer(
  cols = everything(),
  names_to = 'options',
  values_to = 'active'
)

new %>% filter(active == 1) %>% group_by(options) %>% summarise(n = n())

不確定您是在尋找更好的執行速度還是更短的代碼。 您至少可以通過先跨列求和然后旋轉來使代碼更短一些。

dat %>% 
  summarise(across(.fns = sum)) %>% 
  pivot_longer(everything()) %>% 
  ggplot(aes(name, value)) +
  geom_col()

如果您只需要知道10的向量中1的數量,您可以簡單地sum 這可以通過指定fun = "sum"ggplot::stat_summary()內部完成。 這避免了您使用filter()group_by()summarize()引入的一些額外步驟。

library(tidyverse)

set.seed(123)
dat <- tibble(mcq_option_1 = sample(c(0,1), replace = TRUE, size = 100),  mcq_option_2 = sample(c(0,1), replace = TRUE, size = 100),  mcq_option_3 = sample(c(0,1), replace = TRUE, size = 100),  mcq_option_4 = sample(c(0,1), replace = TRUE, size = 100),  mcq_option_5 = sample(c(0,1), replace = TRUE, size = 100))

dat %>%
  pivot_longer(cols = everything(),
               names_to = 'options',
               values_to = 'active') %>%
  ggplot(aes(options, active)) +
  stat_summary(fun = "sum", geom = "bar")

reprex package (v2.0.1) 創建於 2022-02-21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM