R 如何将字符转换为数值并基于分类列对其进行平均?

R 如何将字符转换为数值并基于分类列对其进行平均?,r,dplyr,R,Dplyr,以下是示例数据: project = c("ProjA", "ProjA", "ProjB", "ProjB","ProjC", "ProjC") Q1 = c("Unlikely", "Very likely", "Likely","Unlikely", "Very likely&quo

以下是示例数据:

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)
我的目标是将第一季度和第二季度转化为百分比,然后根据他们所参与的项目对其进行平均。这样,我们可以在每个问题中找到每个项目的平均性能

我试过的是:

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)
但它不起作用,而且它与它所属的项目没有关系。这些值位于前两个框中,因此很可能、很可能、很容易和很容易成功。理想情况下,我想要的是这样一张桌子:

项目 Q1 问题2 普罗贾 50% 47% 项目 50% 47% 项目 50% 47% 给予

#一个tible:3 x 3
项目Q1和Q2
1 ProjA 0 50
2项目50 0
3项目50
使用数据的一些优点是,代码对于项目的数量和标签以及问题和回答的数量的变化是健壮的。它也更适合tidyverse动词,因为它们是为整洁的数据而设计的

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