2017-02-02 2 views
1

Ich verwende aregImpute, um fehlende Werte auf einem R-Datenrahmen (bn_df) zu imputieren.R - Abrufen fehlgeleiteter Werte zurück in Datenframe

Der Code ist dies:

library(Hmisc) 
impute_arg <- aregImpute(~ TI_Perc + AS_Perc + 
         CD_Perc + CA_Perc + FP_Perc, 
         data = bn_df, n.impute = 5) 

Es funktioniert gut.

Das Problem ist danach. Indem die Werte zurück in den ursprünglichen Datenrahmen gebracht werden.

Ich kann es tun, nur nicht in einer sehr eleganten Art und Weise. Ich muss im Grunde die folgende Zeile für alle Spalten kopieren/einfügen:

Dies funktioniert. Aber es muss einen effizienteren Weg geben, dies ohne Kopieren/Einfügen für alle Spalten zu erreichen.

Irgendwelche Ideen?

Antwort

1

Sie können die Funktion impute.transcan verwenden. Da Sie die Daten nicht zur Verfügung gestellt haben, habe ich ein Beispiel aus der Dokumentation aregImpute kopiert.

# The data 
x1 <- factor(sample(c('a','b','c'),1000,TRUE)) 
x2 <- (x1=='b') + 3*(x1=='c') + rnorm(1000,0,2) 
x3 <- rnorm(1000) 
y <- x2 + 1*(x1=='c') + .2*x3 + rnorm(1000,0,2) 
orig.x1 <- x1[1:250] 
orig.x2 <- x2[251:350] 

# Insert NAs 
x1[1:250] <- NA 
x2[251:350] <- NA 

# Create a data frame 
d <- data.frame(x1,x2,x3,y) 
# Find value of nk that yields best validating imputation models 
# tlinear=FALSE means to not force the target variable to be linear 

# Use imputation 
f <- aregImpute(~y + x1 + x2 + x3, nk=c(0,3:5), tlinear=FALSE, 
       data=d, B=10) # normally B=75 

# Get the imputed values 
imputed <-impute.transcan(f, data=d, imputation=1, list.out=TRUE, pr=FALSE, check=FALSE) 

# convert the list to the database 
imputed.data <- as.data.frame(do.call(cbind,imputed)) 

# arrange the columns accordingly 
imputed.data <- imputed.data[, colnames(d), drop = FALSE] 
+0

Vielen Dank! Es hat perfekt funktioniert. Tatsächlich habe ich diese Funktion wahrscheinlich übersprungen. – BrunoPT

+1

Gibt es eine Möglichkeit, den Wert durch den Durchschnitt mehrerer Imputationen anstelle einer bestimmten Zahl zu ersetzen (Imputation = 1)? – Sourabh

Verwandte Themen