如何计算三个班级的具体比率?

时间:2019-04-04 23:03:29

标签: r

我正在尝试使用数据帧“泰坦尼克号”计算存活率。

我已经过滤了一个名为“ Male_adult_passengers”的对象,其向量“类”包括三个等级。

还有另一列记录了生存情况(“是”或“否”)

我想获得不同类别的存活率并进行比较。

我应用了dplyr软件包,并尝试将代码编码为:

Male_adult_passenger %>%
  group_by(Class) %>%
  summarise(S_rates = count(Survived = 'Yes')/count(Survived))

但只发现了一条错误消息:

Error in group_vars(x) : argument "x" is missing, with no default

此消息是什么意思?我该如何获得所需的生存率?

非常感谢您。

2 个答案:

答案 0 :(得分:0)

首先,下一次请提供可复制的示例。您可以轻松地做到这一点,例如使用dput(Male_adult_passenger)

无论如何,该错误是由于使用赋值Survived = 'Yes'而不是比较Survived == 'Yes'而引起的。

尝试解决该问题,但我猜测count会很麻烦。如果不起作用,请尝试:

Male_adult_passenger %>%
  group_by(Class) %>%
  summarise(S_rates = sum(Survived == 'Yes')/n())

如果仍然无法解决问题,请通过编辑您的问题来提供示例,我很乐意进一步研究。

答案 1 :(得分:0)

在提供任何解决方案之前,重要的是要知道如何追溯错误。错误报告提供了发生问题的步骤。 我选择了可​​公开获得的泰坦尼克号数据集,以创建与您的数据帧相似的数据帧

library(dplyr)
titanic<-read.csv('titanic.csv')
Male_adult_passenger<-subset(titanic,Sex=='male')
Male_adult_passenger$Survived<-ifelse(Male_adult_passenger$Survived==0,"No","Yes")
Male_adult_passenger$Survived<-factor(Male_adult_passenger$Survived)

在执行代码块时,问题出在count(Survived ='Yes')。如mgiormenti所述,逻辑比较语法不正确。一旦纠正了逻辑比较,您将得到一个错误,提示计数不是对象类“生存”的适用方法。计数不适用于dplyr。最佳选择是sum,length和n() n()计算分组对象类别中的观察次数。

Male_adult_passenger %>%
  group_by(Pclass,Survived) %>%
  summarize(n())     
Pclass Survived  n()
<int>   <chr>    <int>
1        No       77        
1        Yes      45        
2        No       91        
2        Yes      17        
3        No       296       
3        Yes      47    

长度(n)替代字符列是长度函数。您可能需要的是Survived列的长度,其中Survived =='Yes',Survived [Survived =='Yes']

Male_adult_passenger %>%
  group_by(Pclass) %>%
  summarize(S_rates=length(Survived[Survived=="Yes"])/n())    
Pclass S_rates
<int>  <dbl>
1   0.3688525           
2   0.1574074           
3   0.1370262