2016-04-18 12 views
0

Ich muss eine lineare Regressionsformel auf alle Spalten in meinem Datenframe namens mydf anwenden. Es gibt Tausende von Spalten in mydf, so dass es nicht möglich wäre, sie in der Formel anzugeben. Es gibt zwei Spalten, weight und age, die in der Formel für alle anderen Spalten unverändert bleiben, in denen ich diese Formel anwenden möchte.Formel auf jede Spalte des Datenrahmens anwenden in R

Die Formel für die erste Spalte (Spalte bmd) ist

fit1 <- lm(bmd ~ weight + age, data=mydf) 
mydf[,"a"] <-fit1$fitted.values 

ich auch diese Formel auf andere Spalten anwenden möchten (außer weight und age)

fit1 <- lm(bp ~ weight + age, data=mydf) 
    mydf[,"bp"] <-fit1$fitted.values 

und

fit1 <- lm(choles ~ weight + age, data=mydf) 
    mydf[,"choles"] <-fit1$fitted.values 

was wäre das Beste (Zeiteffizienter Weg, da es wirklich lange dauert) Weg, um diese Formel zu erweitern und die passte.Werte in der rechten Spalte über alle gewünschten Spalten zu speichern (bmd, bp, choles)?

mydf

bmd bp choles weight age 
1 2 3   22.3  12 
2 1 2   33.2  13 
3 2 5   44.5  16 
+0

Sie möchten also die aktuellen Werte dieser anderen Spalten durch die angepassten Werte der Regression ersetzen? – Parfait

+0

@Parfait ja das ist richtig. Aber ich weiß nicht, wie ich es effizienter machen könnte. – MAPK

Antwort

2

Try this:

apply(mydf[-c(4:5)], 2, function(x) lm(x ~ mydf$weight + mydf$age)$fitted.values) 
+0

OP fragte nach angepassten Werten. Möglicherweise müssen Sie $ passed.values ​​hinzufügen. – Parfait

0

Eine Methode:

# get names of all dependent variables 
dependents <- names(df[, -which(names(df) %in% c("weight", "age"))] 

# build a little function 
myFit <- function(depName) { 
    fit1 <- lm(as.formula(paste(depName, "~ weight + age")), data=mydf) 
    return(fit1$fitted.values) 
} 

# sapply them 
fittedValues <- sapply(dependents, myFit) 

Dann cbind ihrem Datensatz.

Verwandte Themen