使用R中的sqldf库编写SELECT语句

时间:2018-02-01 00:41:37

标签: r sqldf

我有数据:

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

但我相信我需要百分比。

3 个答案:

答案 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