使用 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
我有数据:
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