R sqldf 重命名 select 语句中的字段
R sqldf renaming a field in a select statement
根据要求编辑了问题以使其更清楚。
请注意,在末尾的注释中以可重现的形式提供了输入。
我正在使用 sqldf 连接 R 中的两个数据集
代码 returns 具有原始列名的数据集,忽略 select 语句中的 "as"。
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。但我更喜欢让 "as" 像在其他应用程序中那样工作。
有什么想法吗?
请注意,我只关注列名。谢谢!
注意:这里有 a
和 b
的可复制形式:
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)
假设您使用的是 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
根据要求编辑了问题以使其更清楚。
请注意,在末尾的注释中以可重现的形式提供了输入。
我正在使用 sqldf 连接 R 中的两个数据集
代码 returns 具有原始列名的数据集,忽略 select 语句中的 "as"。
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。但我更喜欢让 "as" 像在其他应用程序中那样工作。
有什么想法吗?
请注意,我只关注列名。谢谢!
注意:这里有 a
和 b
的可复制形式:
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)
假设您使用的是 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