2012-11-22 3 views
2

Je travaille avec un objet ffdf qui a NAs dans certaines des colonnes. Les NA sont le résultat d'une fusion externe à gauche utilisant merge.ffdf .Je voudrais remplacer les NA avec 0 mais ne pas réussir à le faire. Voici le code que je suis en cours d'exécution:Remplacer NAs dans un objet ffdf

library(ffbase) 
    deals <- merge(deals,rk,by.x=c("DEALID","STICHTAG"),by.y=c("ID","STICHTAG"),all.x=TRUE) 
    attributes(deals) 
    $names 
    [1] "virtual" "physical" "row.names" 
    $class 
    [1] "ffdf" 

vmode(deals$CREDIT_R) 
[1] "double" 

    idx <- ffwhich(deals,is.na(CREDIT_R)) # CREDIT_R is one of the columns with NAs 
    deals.strom[idx,"CREDIT_R"]<-0 
    error in `[<-.ffdf`(`*tmp*`, idx, "CREDIT_R", value = 0) : 
     ff/ffdf-iness of value and selected columns don't match 

Toute idée de ce que je fais mal? En général, j'aimerais en savoir plus sur le remplacement des méthodes pour les classes ff et ffdf. Toute suggestion où je peux trouver quelques exemples sur le sujet?

Répondre

4

Le manuel du paquet ff indique une fonction appelée ffindexset.

idx <- is.na(deals$CREDIT_R) ## This uses is.na.ff_vector from ffbase 
idx <- ffwhich(idx, idx == TRUE) ## Is part of ffbase 
deals$CREDIT_R <- ffindexset(x=deals$CREDIT_R, index=idx, value=ff(0, length=length(idx), vmode = "double")) ## Is part of ff 
deals$CREDIT_R[idx] <- ff(0, length=length(idx), vmode = "double") ## this one will probably also work 

ont également un oeil à Extract.ff

+0

Salut jwijffels, merci pour votre réponse cependant, les deux solutions que vous proposez générer le même msg d'erreur dans mon cas: * erreur: longueur (valeur) == n n'est pas VRAI * – ddg

+1

Droit, j'ai oublié d'ajouter de la longueur, j'ai mis à jour la réponse – jwijffels

+1

Salut, les deux solutions fonctionnent. Comme toujours des réponses très rapides et précises. Merci beaucoup! – ddg

Questions connexes