r - 如何将字符转换为数值并根据分类列对它们进行平均?
问题描述
这是示例数据:
project = c("ProjA", "ProjA", "ProjB", "ProjB","ProjC", "ProjC")
Q1 = c("Unlikely", "Very likely", "Likely","Unlikely", "Very likely", "Likely" )
Q2 = c("Very easy", "Easy", "Difficult", "Neutral","Very easy", "Easy")
masterdf = data.frame(project, Q1,Q2)
我的目标是将 Q1 和 Q2 转换成百分比,然后根据他们所在的项目进行平均。这样,我们可以在每个问题中找到每个项目的平均表现。
我尝试过的是:
value = c("Likely", "Very likely")
Q1 = masterdf %>% count(Q1) %>% arrange(desc(n))
Q1 = Q1 %>% mutate(pct = Q1$n/sum(Q1$n) *100) %>%
filter(Q1 %in% value)
但它不起作用,而且它与它所属的项目无关。这些值是前 2 个框,因此非常可能、可能、容易和非常容易将是成功的。理想情况下,我想要一张如下所示的表格:
项目 | 第一季度 | 第二季度 |
---|---|---|
项目 | 50% | 47% |
项目B | 50% | 47% |
项目 | 50% | 47% |
解决方案
masterdf %>%
# Make a tidy dataset
pivot_longer(
cols=starts_with("Q"),
names_to="Question",
values_to="Answer"
) %>%
# Convert from categorical to binary
mutate(Success=Answer %in% c("Very Likely", "Likely", "Easy", "Very Easy")) %>%
# Calculate success rates by project and question
group_by(project, Question) %>%
summarise(Rate=100*sum(Success)/n(), .groups="drop") %>%
# Transpose for pressentation
pivot_wider(
names_from=Question,
values_from=Rate
)
给
# A tibble: 3 x 3
project Q1 Q2
<fct> <dbl> <dbl>
1 ProjA 0 50
2 ProjB 50 0
3 ProjC 50 50
使用整洁数据的一些优点是代码在项目数量和标签以及问题和响应数量的变化方面是健壮的。它也更适合 tidyverse 动词,因为它们是为整洁的数据设计的。
推荐阅读
- sonarqube - gradle:解析插件时出错[id:'org.sonarqube',版本:'2.6.2']
- nhibernate - Nhibernate SQLQuery 作为子查询
- node.js - 节点调度撤消取消
- ssas - 在 SSAS 中追踪友好名称的起源
- python - Apache Spark:无法将分组数据保存为 CSV
- vis.js - 使用 Vis.js 网络预定义布局
- python - 如何在 Python 中制作对称三对角矩阵?
- azure-iot-hub - 在 Python 中使用基于 X509 CA 的证书的 Azure IoTHub_Client
- swift - 如何通过 objectMapper 和 Alamofire 发布嵌套的 json?
- r - 提取 .pdf 表