有没有一种方法可以使用`pivot_wider()`来汇总调查数据?

时间:2020-08-21 23:01:26

标签: r dplyr

我有很多调查数据,例如: 我有一些调查数据,可以说是关于受访者处理各种日常事务的频率:

survey <- tribble(
~Q1_toothbrush, ~Q1_bathe, ~Q1_brush_hair, ~Q1_make_bed,
"Always","Sometimes","Often","Never",
"Never","Never","Always","Sometimes",
"Often","Sometimes","Sometimes","Often",
"Sometimes","Always","Often","Never"
)

我想将其安排到一个表中,以显示有多少人选择了“经常”或“总是”。

我可以创建一个新的小标题并对其进行更新,例如一次将每个问题都做一次。

  habits <- tribble(
    ~Habit, ~Description, ~Count,
    "Q1_toothbrush", "Brushes teeth for two minutes twice each daty.", 0,
    "Q1_bathe", "Bathes with soap and water every morning or evening", 0,
    "Q1_hair", "Attends to daily hair health", 0,
    "Q1_make_bed", "Tidies bed covers daily", 0
  ) 
  
  top_two <- c("Always", "Often")
  
  tmp <- survey %>% 
    filter(Q1_toothbrush %in% top_two) %>%
    count()
  
  habits <- habits %>% 
    mutate(Count = ifelse(Habit == "Q1_toothbrush", tmp, Count))

  
  kable(habits)

但是我正在努力将其整合为一个功能。

1 个答案:

答案 0 :(得分:0)

如果我们需要为每一行执行此操作,则在执行c_across后可以选择rowwise

library(dplyr) # >= 1.0.0
survey %>% 
    rowwise %>%
    mutate(count = sum(c_across(everything()) %in% top_two)) %>%
    ungroup

或者我们可以将其整形为'long'格式,然后执行count

library(dplyr)
library(tidyr)
pivot_longer(survey, everything()) %>%
      filter(value %in% top_two) %>%
      dplyr::count(name)