你好,
我正在尝试使用R中的CASE语句运行查询。我正在使用SQLDF包。相同的查询在Mysql中工作正常。查询根据以下情况给出0或1的值以“表达”:

选择“表达” =
案件
当E_MAIL像“%gmail%”时,则为1
当E_MAIL像“%yahoo%”时,则为1
当E_MAIL像“%hotmail%”时,则为1
否则0
结束
从数据
 ;

这是我在R中尝试过的:
alpha 案件
当E_MAIL像“%gmail%”时,则为1
当E_MAIL像“%yahoo%”时,则为1
当E_MAIL像“%hotmail%”时,则为1
否则0
结束
来自数据”);

任何帮助将不胜感激!
谢谢

最佳答案

问题在于问题中的查询字符串在引号中包含引号,并且语法错误。使用默认的SQLite数据库(sqldf也支持MySQL),我们可以:

library(sqldf)
data <- data.frame(E_MAIL = c("x@x.com", "x@yahoo.com"))

sqldf("select E_MAIL,
  case
    when E_MAIL like '%gmail%' then 1
    when E_MAIL like '%yahoo%' then 1
    when E_MAIL like '%hotmail%' then 1
    else 0
  end express
  from data")


给予:

       E_MAIL express
1     x@x.com       0
2 x@yahoo.com       1


或者,也许您打算执行udpate。这给出了与显示的测试数据相同的输出:

data <- data.frame(E_MAIL = c("x@x.com", "x@yahoo.com"), express = 0)

sqldf(c("update data set express =
  case
    when E_MAIL like '%gmail%' then 1
    when E_MAIL like '%yahoo%' then 1
    when E_MAIL like '%hotmail%' then 1
    else 0
  end", "select * from main.data"))


注意:下次,请提供完整的可复制示例,包括输入内容。

关于mysql - R- SQLDF-选择…案例…结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29020920/

10-12 17:44
查看更多