R sqldf在select语句中重命名字段

时间:2016-04-11 15:38:27

标签: sql r sqldf

根据要求编辑问题更清楚。

请注意,输入在最后的注释中以可复制的形式提供。

我使用sqldf连接R

中的两个数据集

代码返回带有原始列名称的数据集,忽略" as"在select语句中。

output_1 <- sqldf("SELECT a.MRN, a.TestDate, b.TestDate as Date2 
from     a     
inner join b 
on a.MRN=b.MRN order by a.MRN, a.TestDate")

,并提供:

> sapply(output_1,colnames)
$MRN
NULL

$TestDate
NULL

$TestDate
NULL

> head(output_1)
    MRN   TestDate   TestDate
1 10013 2013-09-10 2014-05-20
2 10013 2013-09-10 2014-05-20
3 10013 2013-09-10 2014-05-20
4 10013 2013-09-10 2014-11-18
5 10013 2013-09-10 2015-05-19
6 10013 2013-10-15 2014-05-20

知道为什么或如何在输出中获得正确的字段名称?

我开发的解决方法是在使用内部联接调用之前在第二个数据集(b)中重命名 TestDate 。但是我更愿意得到&#34; as&#34;像在其他应用程序中一样工作。

有什么想法吗?

请注意,我的重点仅在于列名。谢谢!

注意:以下是ab的可重复形式:

Lines_a <- "MRN   TestDate
10013 2013-09-10
10013 2013-10-15
10013 2013-11-19
10013 2014-05-20
10013 2014-11-18
10051 2010-02-10"
a <- read.table(text = Lines_a, header = TRUE)

Lines_b <- "MRN   TestDate
10013 2014-05-20
10013 2014-05-20
10013 2014-05-20
10013 2014-11-18
10013 2015-05-19
10051 2010-05-26"
b <- read.table(text = Lines_b, header = TRUE)

1 个答案:

答案 0 :(得分:3)

假设您正在使用H2数据库(如果加载了RH2包,就会出现这种情况),那么我可以在问题中重现输出。它可能代表H2中的错误。尝试使用sqlite代替(i)不加载RH2或(ii)如果加载则分离它或(iii)如果使用sqldf(..., drv = "SQLite")

这些都不合适

这里我们展示了我们可以重现RH2加载的问题中显示的输出:

library(RH2)
library(sqldf)

output_1 <- sqldf("SELECT a.MRN, a.TestDate, b.TestDate as Date2
from     a     
inner join b 
on a.MRN=b.MRN order by a.MRN, a.TestDate")

,并提供:

> head(output_1)
    MRN   TestDate   TestDate
1 10013 2013-09-10 2014-05-20
2 10013 2013-09-10 2014-05-20
3 10013 2013-09-10 2014-05-20
4 10013 2013-09-10 2014-11-18
5 10013 2013-09-10 2015-05-19
6 10013 2013-10-15 2014-05-20