我有数据:
library(earth)
data(etitanic)
我还需要使用库
library(sqldf)
我的目标是编写一个SELECT语句,按性别返回生存率。我的陈述必须包括etitanic数据框(像数据库表一样对待)。
我不太了解SQL,但根据我的理解,我必须写一些类似
的内容SELECT survival, gender
FROM etitanic
我不确定如何在R中实现这一点,任何建议都会有所帮助。 我尝试了以下方法:
df = sqldf('select count(*) total from etitanic where survived group by sex')
df2 = t(df)
colnames(df2)=c('Female','Male')
给了我这个:
Female Male
total 292 135
但我相信我需要百分比。
答案 0 :(得分:0)
SQL不允许您直接计算百分比。您需要做的是计算幸存者和总人数,然后将两者分开。查询如下所示:
select
sex
, sum(case when survived then 1 else 0 end) / count(1) as survival_pct
from etitanic
group by sex
;
答案 1 :(得分:0)
像这样使用avg
:
sqldf('select sex, 100 * avg(survived) [%Survived] from etitanic group by sex')
,并提供:
sex %Survived
1 female 75.25773
2 male 20.51672
要仔细检查with(etitanic, table(sex, survived))
来自C# ASP.NET Core Web Api
的这些数字,292名女性存活,96名未存活,生存率为100 * 292 /(292 + 96)= 75.25773%,同样男性则为100 * 135 / (135 + 523)= 20.51672%。
答案 2 :(得分:-1)
SQL返回分数是否是必需的?为什么不简单地让SQL返回计数然后计算R中的分数
df <- sqldf('select count(*) Total from etitanic where survived group by sex');
df / sum(df);
# Total
#1 0.6838407
#2 0.3161593