正确传递列名作为R中SQL查询的函数参数

时间:2014-06-02 03:08:42

标签: sql r sqldf

我有一个数据文件sales_history。我想以下面的方式查询它。

my_df<-sqldf("SELECT * 
                    FROM sales_history
                    WHERE Business_Unit=='RETAIL'"")

现在我想用参数datafile和column name编写一个函数来完成上述工作。如下所示:

pick_column<-function(df, column_name){
  my_df<-sqldf("SELECT * 
                      FROM df
                      WHERE Business_Unit==column_name"
  return(my_df)
}

理想情况下,在运行上面的函数定义之后,我应该能够运行 pick_column(sales_history,'RETAIL')。但是,当我这样做时,第二个论点&#39;零售&#39;没有正确传递给函数。那么这样做的正确方法是什么?

我知道,对于这个例子,除了使用&#34; sqldf&#34;之外还有其他方法可以做到这一点。用于SQL查询。但我的问题在于如何正确传递column_name作为函数参数。

1 个答案:

答案 0 :(得分:4)

sqldf包使用gsubfn允许您通过在&#34; $&#34;前面添加R变量的名称到SQL命令中。字符。所以你可以写

sales_history <- data.frame(
    price=c(12,10),
    Business_Unit=c("RETAIL","BUSINESS"),
    stringsAsFactors=F
)

pick_column <- function(df, columnname) {
    fn$sqldf("SELECT * FROM $df WHERE Business_Unit='$columnname'")
}

pick_column("sales_history","RETAIL")