2016-04-11 5 views
2

Modifié la question pour être plus clair comme demandé. Notez que les entrées sont fournies sous forme reproductible dans la note à la fin.R sqldf renommer un champ dans une instruction select

J'utilise sqldf pour joindre deux ensembles de données en R

Le code renvoie un ensemble de données avec le avec les noms de colonnes d'origine, ignorant le « comme » dans l'instruction 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") 

donnant:

> 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 

Toute idée pourquoi, ou comment obtenir les noms de champs à droite dans la sortie?

Une solution de contournement que j'ai développé consiste à renommer TestDate dans le deuxième jeu de données (b) avant d'utiliser l'appel de jointure interne. Mais je préfère obtenir le "comme" pour travailler comme dans d'autres applications.

Des idées?

Veuillez noter que je me concentre uniquement sur le nom de la colonne. Et merci!

Note: Voici a et b sous forme reproductible:

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

S'il vous plaît montrer la tête 'a',' b' et 'output_1' – Tgsmith61591

+0

Je reçois ces colonnes comme prévu:' NRM, TestDate, Date2' – zx8754

+0

On dirait un problème local alors. Une idée de pourquoi cela se passe sur ma machine? Que devrais-je rechercher? –

Répondre

3

En supposant que vous utilisez la base de données de H2 (ce qui serait le cas si le paquet RH2 est chargé) alors je suis en mesure de reproduire la sortie dans la question. Cela peut représenter un bug dans H2. Essayez d'utiliser sqlite à la place (i) ne pas charger RH2 ou (ii) le détacher s'il est chargé ou (iii) si aucun n'est souhaitable avec sqldf(..., drv = "SQLite")

Ici nous montrons que nous pouvons reproduire la sortie montrée dans la question avec RH2 chargé:

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") 

donner:

> 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

Merci! J'ai couru le script sans charger RH2, et n'ai eu aucun problème avec la sortie. Très appréciée! –

+0

Comment l'avez-vous compris ?! –

+1

Il n'a pas pu être reproduit avec SQLite donc cela semblait la prochaine chose à essayer. –