Mehrere Ergebnisse aus einer Funktion in einen dataframe schreiben?
Verfasst: Di Sep 25, 2018 8:18 pm
Lieber Forum,
eigentlich eine scheinbar simple Aufgabe, für die ich aber keine rechte Lösung finde. Ich habe folgende density Funktion erstellt:
Die Funktion liefert mir, wie sie soll, den "Dichteschwerpunkt eines Vektors. Ich wende die Funktion nun erfolgreich mit apply auf einen data.frame mit n columns an wobei ich zur Berechnung des Dichteschwerpunktes pro Reihe die 1. column nicht berücksichtige.
Das klappt auch alles und ich habe eine neue Variable a im data.frame die mir den Dichteschwerpunkt für die jeweilige Zeile gibt.
Nun möchte ich aber pro Zeile zusätzlich zum Dichteschwerpunkt auch noch die Bandwidth der Berechnung in den Datensatz als zusätzliche Variable schreiben.
Dazu ändere ich meien Funktion wie folgt:
Wie bekomme ich nun aber die zusätzliche Variable "dx$bw" in den Datensatz. Egal was ich probiert habe, ich bekomme es einfach nicht hin. Ich bin sicher, dass es eine ganz einfache Lösung gibt die sich mir aktuell aber einfach nicht erschliessen will.
Herzlichen Dank für einen Tip
Philipp
eigentlich eine scheinbar simple Aufgabe, für die ich aber keine rechte Lösung finde. Ich habe folgende density Funktion erstellt:
Code: Alles auswählen
dmode <- function(x) {
dxapprox <- approxfun(density(x, adjust=1, kernel = c("gaussian"), na.rm = TRUE))
dx <- density(x, adjust=1, kernel = c("gaussian"), na.rm = TRUE)
plot(dx)
points(x, dxapprox(x),col=2)
dx$x[which.max(dx$y)]
}
Code: Alles auswählen
selected_data$a <- apply(selected_data[,2:ncol(selected_data)],1,dmode)
Nun möchte ich aber pro Zeile zusätzlich zum Dichteschwerpunkt auch noch die Bandwidth der Berechnung in den Datensatz als zusätzliche Variable schreiben.
Dazu ändere ich meien Funktion wie folgt:
Code: Alles auswählen
dmode <- function(x) {
dxapprox <- approxfun(density(x, adjust=1, kernel = c("gaussian"), na.rm = TRUE))
dx <- density(x, adjust=1, kernel = c("gaussian"), na.rm = TRUE)
plot(dx)
points(x, dxapprox(x),col=2)
dx$x[which.max(dx$y)]
dx.list <- list(dx$x[which.max(dx$y)], dx$bw)
return(dx.list)
}
Herzlichen Dank für einen Tip
Philipp