运行 在 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>
我不确定这是否可行。
现在我正在 运行使用 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>