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

Using the sqldf library from R to write a SELECT statement

我有数据:

library(earth)
data(etitanic)

我还需要用到图书馆

library(sqldf)

我的目标是写一个 SELECT 声明 returns 按性别划分的存活率。我的声明必须包括 etitanic 数据框(像数据库一样处理 table)。

我不太了解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

但我相信我需要百分比。

SQL 不允许您直接计算百分比。你需要做的是计算幸存人数和总人数,然后将两者相除。查询如下所示:

select
    sex 
  , sum(case when survived then 1 else 0 end) / count(1) as survival_pct
from etitanic
group by sex
;

像这样使用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)) 中有 292 名女性幸存下来,而 96 名女性没有幸存,因此存活率为 100 * 292 / (292 + 96) = 75.25773%,同样对于男性,我们得到 100 * 135 / (135 + 523) = 20.51672%.

SQL return分数是要求吗?为什么不简单地让 SQL return 计数然后计算 R 中的分数:

df <- sqldf('select count(*) Total from etitanic where survived group by sex');
df / sum(df);
#      Total
#1 0.6838407
#2 0.3161593