运行 在 SQL 查询的列上循环(需要使用 sqldf 完成)

Run While Loop on Column of SQL Queries (Needs to be done using sqldf)

我不确定这是否可行。

现在我正在 运行使用 sqldf 包进行此操作:

Col1 <- c('emdabcer','deffghiee','lmnop')
Col2 <- c(1,2,3)
df <- data.frame(Col1, Col2)

df
      Col1 Col2
  emdabcer    1
 deffghiee    2
     lmnop    3

现在,我正在手动输入 SQL 脚本。

sqldf("SELECT *, CASE 
WHEN [Col1] LIKE '%abc%' THEN REPLACE([Col1], [Col1], 'Label1')
WHEN [Col1] LIKE '%def%' AND [Col1] LIKE '%ghi%' THEN REPLACE([Col1], [Col1], 'Label2')
ELSE NULL END [Category Label] FROM df")

我的实际数据集中有 40 个不同的 CASE WHEN 实例。

有没有一种方法可以使用单独的 table/dataframe 来获取我的输出?

下面是包含我的查询的示例数据框:

Queries <- c("WHEN [Col1] LIKE '%abc%' THEN REPLACE([Col1], [Col1], 'Label1')",
         "WHEN [Col1] LIKE '%def%' AND [Col1] LIKE '%ghi%' THEN REPLACE([Col1], [Col1], 'Label2')",
         "WHEN [Col1] LIKE '%mn%' THEN REPLACE([Col1], [Col1], 'Label3')")
Query_df <- data.frame(Queries)

Query_df

Queries
WHEN [Col1] LIKE '%abc%' THEN REPLACE([Col1], [Col1], 'Label1')
WHEN [Col1] LIKE '%def%' AND [Col1] LIKE '%ghi%' THEN REPLACE([Col1], [Col1], 'Label2')
WHEN [Col1] LIKE '%mn%' THEN REPLACE([Col1], [Col1], 'Label3')

然后我会做这样的事情:

sqldf("SELECT *, CASE 
WHILE length(Queries_df) <= length(Queries_df)
BEGIN RUN Queries
END

我知道上面的内容是错误的,但大致是这样的。

如有帮助将不胜感激!

这是我正在研究的参考资料:https://www.essentialsql.com/using-while-statement-stored-procedures/

创建定义要查找的模式的 Pat 数据框,然后将其加入 df:

Pat <- data.frame(
  pat1 = c('abc', 'def'),
  pat2 = c('', 'ghi'),
  Label = c('Label1', 'Label2'),
  stringsAsFactors = FALSE)

sqldf("select a.*, b.Label
  from df a 
  left join Pat b on a.Col1 like '%' || b.pat1 || '%' and 
                     a.Col1 like '%' || b.pat2 || '%'")

给予:

       Col1 Col2  Label
1  emdabcer    1 Label1
2 deffghiee    2 Label2
3     lmnop    3   <NA>