【问题标题】:converting numeric to character in sqldf在sqldf中将数字转换为字符
【发布时间】:2015-07-27 15:54:10
【问题描述】:

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

这是我的 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

有什么想法吗?

【问题讨论】:

    标签: r casting character sqldf


    【解决方案1】:

    虽然这在 SQL Server 中有效,但您必须使用 || 而不是 +,因为 sqldf 很可能使用 SQLite 后端:

    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
    )
    

    【讨论】:

    • 谢谢你。它只需少量添加即可工作。事实上强制转换不起作用,在您发出命令之前,我应该将这些列转换为字符,如下所示:DF
    • 我将options(stringsAsFactors = FALSE) 作为我机器上的默认设置,以防上述答案正常工作。
    • 这取决于数据框的值是整数还是数字。如果是数字,你会得到虚假的.0s。
    【解决方案2】:

    如果加载了RH2包,sqldf会默认使用H2,我们可以访问其他SQLite中没有的functions

    在这个例子中我们可以使用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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2020-09-14
      • 2022-01-17
      • 2016-09-01
      相关资源
      最近更新 更多