opensdmx/rsdmx

Issue with as.data.frame with labels=TRUE

Closed this issue · 4 comments

Depuis plusieurs heures, j'essaie d'utiliser la fonction as.data.frame après avoir utilisé la fonction setDSD et j'obtiens l'erreur suivante. Avez-vous une idée sur ce que je dois faire? Les données proviennent d'un organisme officiel -Statistique Canada. J'ai mis le fichier zip de provenance en fichier joint. Si vous avez quelques minutes pour m'aider, j'apprécierais beaucoup. Merci.

18100003-SDMX.zip

Après avoir dézipper les deux fichiers pour lire la structure et les données, j'utilise la fonction

setDSD et ça marche. C'est quand je tente de transformer ce fichier en data.frame en voulant voir

les labels (ce qui est nécessaire), c'est ici que ça plante.

dsd <- readSDMX(file.choose(), isURL=FALSE) #petit fichier, dit structure
data <- readSDMX(file.choose(), isURL = FALSE) #gros fichier, dit généric

#associate the DSD to the dataset
data <- setDSD(data,dsd)

#because you associated the DSD, you can now apply labels = TRUE
df <- as.data.frame(data, labels = TRUE)

Error in as.data.frame.SDMXCodelists(slot(dsd, "codelists"), codelistId = clName) :
trying to get slot "Code" from an object of a basic class ("NULL") with no slots

Hello @jhguay I had a look carefully, apparently something is wrong in the DSD from Statistics Canada, as they report as component a codelist for a column ( NB_DECIMALS) while it doesn't correspond to a codelist, hence the error catched by rsdmx where it expects to fetch a non-existing codelist. I've added some double check in case this disrepancy occurs in the datasource.

You can test it but you will need to use the modified package from Github.

To reinstall the package from Github, you need devtools package, then run this:

library(devtools)
install_github("opensdmx/rsdmx")
library(rsdmx)

let me know if it works for you,

Best regards,
Emmanuel

Fantastic, it works very well. Quick modification in addition. Thank you very much.

Great! if rsdmx is of added value for you, i'd be grateful if you woul star it in github. Best regards