Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在sqldf中将数字转换为字符_R_Casting_Character_Sqldf - Fatal编程技术网

R 在sqldf中将数字转换为字符

R 在sqldf中将数字转换为字符,r,casting,character,sqldf,R,Casting,Character,Sqldf,我试图使用sqldf命令在R中连接数据帧的两列。但是,它将它们视为数字,并将它们相加。我看了关于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(

我试图使用sqldf命令在R中连接数据帧的两列。但是,它将它们视为数字,并将它们相加。我看了关于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")

有什么想法吗?

尽管这在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如果加载了RH2包,则默认情况下,sqldf将使用,并且我们可以访问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")

谢谢你,努塞尔。它只需少量添加即可工作。事实上,cast不起作用,在您发出命令之前,我应该将这些列转换为字符,如下所示:DF I在我的机器上有
选项(stringsAsFactors=FALSE)
作为默认设置,而上述答案可以正常工作。这取决于数据帧的值是整数还是数字。如果是数字,则会得到虚假的
.0
s。
# Using sqldf alone   
sqldf("SELECT CAST(SP1 as text) FROM df")
# RH2 loaded
sqldf("SELECT TO_CHAR(SP1) FROM df")