2016-04-11 3 views
2

Отредактировав вопрос, который будет более понятным в соответствии с запросом.R sqldf переименование поля в операторе select

Обратите внимание, что входы указаны в воспроизводимой форме в примечании в конце.

Я использую sqldf для соединения двух наборов данных в R

код возвращает набор данных с с оригинальными названиями столбцов, не обращая внимания на «как» в операторе отбора.

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 

Любая идея, почему, или как получить правильные имена полей в выводе?

Обходным решением, которое я разработал, является переименование TestDate во втором наборе данных (b) перед использованием внутреннего вызова соединения. Но я предпочитаю, чтобы «как» работал так же, как в других приложениях.

Любые идеи?

Обратите внимание: основное внимание уделяется только имени столбца. И спасибо!

Примечание: Вот 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) 
+0

Пожалуйста, покажите головку 'Ā',' b' и 'output_1' – Tgsmith61591

+0

я получаю эти столбцы, как и ожидалось:' MRN, TestDate, Date2' – zx8754

+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 
+0

Спасибо! Я запускал скрипт без загрузки RH2 и не имел проблем с выходом. Очень ценим! –

+0

Как вы это поняли ?! –

+1

Невозможно воспроизвести его с помощью SQLite, так что это казалось следующей задачей. –