引用R sqldf语句中的向量

时间:2016-04-06 17:59:25

标签: r dataframe sqldf

我有一个引用数据帧的SQLDF语句,但我也希望它引用一个不属于数据帧的向量,如下所示。

sqldf("select count(*) from carddata where new_user_indicator == 'Y' & loyalty_threshold >  average_loyalty_threshold")

average_loyalty_threshold是一个独立的向量,单独计算,不属于数据框。

如何在sqldf where子句中引用独立向量。

谢谢

1 个答案:

答案 0 :(得分:1)

假设您的数据如下所示:

library(sqldf)

carddata = data.frame(new_user_indicator = c('N','N','Y','Y','Y'),
                      loyalty_threshold = c(1,1,5,3,1))

您的目标是使用另一个带有单个值的向量来选择忠诚度阈值高于该值的carddata的所有实体,您可以使用以下内容:

# create a dataframe from average_loyalty_threshold so that sqldf will see it as a table
average_loyalty_threshold = data.frame(threshold = 2)

sqldf("select count(*)
      from carddata
      where new_user_indicator == 'Y'
      and loyalty_threshold > (select * from average_loyalty_threshold)")

#returns

  count(*)
1        2

使用(select * from average_loyalty_threshold),您可以选择要查找的单个值。

然而,有更简单的方法:

average_loyalty_threshold = 2

fn$sqldf("select count(*)
  from carddata
  where new_user_indicator == 'Y'
  and loyalty_threshold > `average_loyalty_threshold`")

#returns

  count(*)
1        2

在这里,我将忠诚度阈值直接传递给查询。

您也可以使用sprintf()进行此文字粘贴,但正如其他人在评论中指出的那样,fn$是引用外部变量的推荐方式。