在sqldf中将数字转换为字符

converting numeric to character in sqldf

我正在尝试使用 sqldf 命令连接 R 中数据框的 2 列。但是,它将它们视为数字并将它们相加。我查看了关于 Whosebug 的类似问题的 solution,但它仍然对我不起作用。

这是我的 DF 的样子:

SP1  SP2
521  526
521  523

我想要的是:

SP
521-526
521-523

我尝试了以下方法:

sqldf("select  SP1 + '-' + SP2 as SP from DF")

我也试过:

DF2 <- transform(DF, SP1 = as.character(SP1), SP2 = as.character(SP2)))
sqldf("select  SP1 + '-' + SP2 as SP from DF2")

在这两种情况下,我得到的结果都是

SP
1047
1044

有什么想法吗?

尽管这在 SQL 服务器中有效,但您必须使用 || 而不是 +,因为 sqldf 很可能使用 SQL项目后端:

R> sqldf::sqldf(
    "SELECT SP1 || '-' || SP2 AS SP
     FROM df;"
  )
       SP
1 521-526
2 521-523

数据:

df <- read.table(
  text = "SP1  SP2
  521  526
  521  523",
  header = TRUE
)

如果加载 RH2 包,sqldf 将使用 H2 by default, and we can access other functions 在 SQLite 中不可用:

在这个例子中我们可以使用CONCAT:

library(RH2)
library(sqldf
sqldf("SELECT CONCAT(SP1, '-' , SP2) AS SP FROM df")

输出:

      SP
1 521-526
2 521-523

如果我们需要将列转换为字符:

# Using sqldf alone   
sqldf("SELECT CAST(SP1 as text) FROM df")
# RH2 loaded
sqldf("SELECT TO_CHAR(SP1) FROM df")