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 ?