3 votes

Erreur de lecture RODBC lorsque la colonne Excel contient des NA de tête

J'ai lu des feuilles Excel dans R en utilisant le RODBC et j'ai rencontré un problème avec le pilote ODBC d'Excel. Les colonnes qui contiennent (suffisamment) de NA en tête sont forcées de devenir logiques.

Dans Excel, les données apparaissent comme suit :

period      n       n.ft n.pt
1/02/1985   0.008   NA  0.025
1/03/1985   -0.003  NA  -0.024
1/04/1985   0.002   NA  0.015
1/05/1985   0.006   NA  0.012
1/06/1985   0.001   NA  0.003
1/07/1985   0.005   NA  0.010
1/08/1985   0.006   NA  0.001
1/09/1985   0.007   NA  0.013
1/10/1985   -0.002  NA  0.009
1/11/1985   0.013   NA  0.019
1/12/1985   -0.004  NA  -0.021
1/01/1986   0.008   NA  0.009
1/02/1986   0.002   NA  0.009
1/03/1986   0.002   -0.003  1.000
1/04/1986   0.010   -0.003  0.041
1/05/1986   0.000   -0.001  -0.004
1/06/1986   0.005   0.003   0.005
1/07/1986   -0.003  0.005   0.012
1/08/1986   -0.001  -0.003  -0.021
1/09/1986   0.003   -0.001  0.012
1/10/1986   0.003   0.003   0.010
1/11/1986   -0.003  0.003   -0.003
1/12/1986   0.003   -0.003  0.022
1/01/1987   0.001   0.013   -0.004
1/02/1987   0.004   -0.004  0.011
1/03/1987   0.004   0.008   0.005
1/04/1987   0.000   0.002   -0.002
1/05/1987   0.001   0.002   0.006
1/06/1987   0.004   0.010   0.00

Je lis dans les données avec :

require(RODBC)
conexcel <- odbcConnectExcel(xls.file="C:/data/example.xls")
s1 <- 'SOx'
dd <- sqlFetch(conexcel, s1)
odbcClose(conexcel)

On peut lire dans le tout le site la deuxième colonne comme NA . Je pense que c'est dû au fait qu'il est deviné pour être logique, et donc les numéros suivants sont évalués comme invalides et donc NA .

> str(dd)
'data.frame':   29 obs. of  4 variables:
 $ period: POSIXct, format: "1985-02-01" "1985-03-01" ...
 $ n     : num  0.00833 -0.00338 0.00157 0.00562 0.00117 ...
 $ n#ft  : logi  NA NA NA NA NA NA ...
 $ n#pt  : num  0.02515 -0.02394 0.0154 0.01224 0.00301 ...

J'essaie de trouver un moyen d'empêcher cette coercition à la logique, qui je pense est à l'origine de l'erreur subséquente.

J'ai trouvé este Q+A en cherchant sur SO, mais je suis au travail et je n'ai aucun espoir d'être autorisé à modifier le registre pour changer la valeur par défaut du DWORD, comme le montre le tableau ci-dessous. Proposition de (Je comprends que la valeur définie ici détermine le nombre de NA nécessaires avant que Microsoft ne devine le type de données et ne bombarde ma lecture).

Pour l'instant, je pense que la meilleure solution consiste à inverser les données dans Excel et à les lire dans R à l'envers.

J'aime un bon pirater mais il y a sûrement une meilleure solution ?

4voto

Dieter Menne Points 5354

Il ne s'agit pas d'un bogue, mais d'une fonctionnalité d'ODBC (notez l'absence de R), comme documenté ici.

http://support.microsoft.com/kb/257819/en-us

(page longue, vérifier si le type de données est mixte).

La lecture de fichiers Excel avec ODBC étant plutôt limitée, je préfère l'une des alternatives mentionnées par Gabor, avec une préférence pour XLConnnect.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X