【问题标题】:Multiple Response Questions using Dplyr and Tidyr使用 Dplyr 和 Tidyr 的多选题
【发布时间】:2016-07-05 11:22:32
【问题描述】:

我正在努力解决 R 中的多个响应问题。我希望找到一种简单的方法来使用 dplyr 和 tidyr 解决这个问题。下面是一个示例多响应数据帧。我正在尝试做一些事情,首先,创建百分比 - 猫的百分比,狗的百分比等。百分比将是整体反应。我通常计算百分比 -

group_by(_)%>%summarise(count=n())%>%mutate(percent=count/sum(count)) 

在这种情况下似乎没有削减它。也许我必须使用 summarise_each 或更专业的功能?我对 r 还是很陌生,对 Dplyr 和 Tidyr 还是很陌生。我还尝试使用 Tidyr 的“联合”功能,该功能有效,但它包括 NA,我将不得不重新编码。但我似乎仍然无法计算联合列的百分比。

任何建议都会很棒!首先,如何使用“联合”将多个响应列合并为所有可能的组合,然后计算每个组合的百分比,以及如何简单地计算每个二元列的百分比作为整体响应的比例?希望这是有道理的!我敢肯定,我忽略了一个简单而优雅的答案。

Cats<-c(Cat,NA,Cat,NA,NA,NA,Cat,NA)

Dogs<-c(NA,NA,Dog,Dog,NA,Dog,NA,Dog)

Fish<-c(NA,NA,Fish,NA,NA,NA,Fish,Fish)

Pets<-data.frame(Cats,Dogs,Fish)

Pets<-Pets%>%unite(Combined,Cats,Dogs,Fish,sep=",",remove=FALSE)

 Animals%>%group_by(Combined)%>%summarise(count=n())%>%mutate(percent=count/sum(count))

【问题讨论】:

  • 请分享可以读入 R 的预期输出和数据。
  • 感谢您的评论。我对这个网站还比较陌生,你所说的分享预期输出是什么意思?
  • 在您在帖子中描述的所需转换后数据会是什么样子。
  • 阅读this

标签: r dplyr tidyr


【解决方案1】:

根据我对您问题的理解,听起来您正在尝试做的事情可以通过 tidyr 中的“gather()”函数而不是“unite()”函数来完成。

library(dplyr)
library(tidyr)

Pets %>% 
  gather(animal, type, na.rm = TRUE) %>% 
  group_by(animal) %>% 
  summarize(count = n()) %>% 
  mutate(percentage = count / sum(count))

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2021-09-18
    • 2019-09-26
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    相关资源
    最近更新 更多