【发布时间】:2019-03-15 17:10:39
【问题描述】:
基本 dplyr 问题...受访者可以选择他们使用的多家公司。例如:
library(dplyr)
test <- tibble(
CompanyA = rep(c(0:1),5),
CompanyB = rep(c(1),10),
CompanyC = c(1,1,1,1,0,0,1,1,1,1)
)
test
如果这是一个强制选择问题 - 即受访者只能选择一个 - 我会为基本汇总表执行以下操作:
test %>%
summarise_all(funs(sum), na.rm = TRUE) %>%
gather(Response, n) %>%
arrange(desc(n)) %>%
mutate("%" = round(100*n/sum(n)))
但是请注意,“%”列不是我想要的。我正在寻找每个单独的响应选项占总受访者的比例(因为他们可以做出多项选择)。
我尝试在summarise_all 命令之前添加mutate(totalrows = nrow(.)) %>%。这将允许我在以后的mutate 命令中使用该变量作为分母。但是,summarise_all 消除了“totalrows”变量。
另外,如果有更好的方法可以做到这一点,我愿意接受。
【问题讨论】:
-
我不确定我是否理解您的问题,但您不能只取每列的平均值来获得每个单独响应选项的总受访者比例吗?我的意思是,如果五分之三的人选择 A 公司,那么您的数据可能看起来像
c(1, 0, 1, 1, 0)。如果取平均值,则为 0.6,即选择该选项的受访者比例。 -
这完全可行 - 想多了。请切换回答,我会接受的。
-
如果你想继续想太多,你可以把
sum(n)改成nrow(test),所以代码是test %>% summarise_all(funs(sum), na.rm = TRUE) %>% gather(Response, n) %>% arrange(desc(n)) %>% mutate("%" = round(100*n/nrow(test)))