bei der Berechnung eines Datensatzes wende ich die folgede Funktion zur Berechnung der kernel-density Werte mit der option weights pro zeile an.
Code: Alles auswählen
dmode <- function(x) {
dxapprox <- approxfun(density(x, adjust=2, kernel = c("gaussian"),na.rm = TRUE, weights = df_list_weights))
dx <- density(x, adjust=2, kernel = c("gaussian"), na.rm = TRUE, weights = df_list_weights)
# plot(dx)
# points(x, dxapprox(x),col=2)
# dx$x[which.max(dx$y)]
c(kernel_density_value=dx$x[which.max(dx$y)], bandwidth=dx$bw)
}
temp <- as.data.frame(t(apply(selected_data[,3:ncol(selected_data)-1], 1, dmode)))
##Als Testdaten habe ich folgende Daten verwendet
Code: Alles auswählen
df_list_weights.1 <- c(0.25,0.1,0.33)
df_list_weights.2 <- c(0.25,0.6,NA)
df_list_weights.3 <- c(NA,0.1,0.33)
df_list_weights.4 <- c(0.25,NA,0.34)
df_list_weights.5 <- c(0.25,0.2,NA)
df_list_weights <- data.frame(df_list_weights.1,df_list_weights.2,df_list_weights.3,df_list_weights.4,df_list_weights.5)
selected_data.1 <- c(1,2,3)
selected_data.2 <- c(3,3,NA)
selected_data.3 <- c(NA,3,7)
selected_data.4 <- c(7,NA,4)
selected_data.5 <- c(2,3,NA)
selected_data <- data.frame(selected_data.1,selected_data.2,selected_data.3,selected_data.4,selected_data.5)
Das Skript gibt mir nun den Fehler
"Fehler in density.default(x, adjust = 2, kernel = c("gaussian"), na.rm = TRUE, :
'x' and 'weights' have unequal length"
Ich habe ein paar Tests durchgeführt und gefunden, dass es an den vorhandenen NA-Werten in in "df_list_weight) liegt die wohl, entgegen zum eigentlichen datensatz "selected_data" NICHT über die option na.rm = TRUE im Funktionsaufruf entfernt werden. Wen n ich das bei einem kleinen Datensatz manuell manche, klappt alles prima.
Nun ist es mir aber ein Rätsel wir ich aus dem data.frame df_list_weights die NA's entfernen soll. Ich habe dazu den Versuch gemacht den data.frame mit den beiden codezeilen
Code: Alles auswählen
df_list_weights <- split(df_list_weights, seq(nrow(df_list_weights)))
df_list_weights <- lapply(df_list_weights, function(x) x[!is.na(x)])in
Über jedemn Lösungsvorschlag wäre ich dankbar.
VG Philipp