I-Daten haben wie so:mehrere Spalten mit Spalten Mittelwert von Nicht-Null-Werte ersetzen
aye <- c(0,0,3,4,5,6)
bee <- c(3,4,0,0,7,8)
see <- c(9,8,3,5,0,0)
df <- data.frame(aye, bee, see)
ich für eine prägnante Art und Weise suchen Spalten für jede der Spalten in dem Datenrahmen basierend auf dem Mittelwert zu erstellen , wobei Null bei Null gehalten wird.
df2 <- as.data.frame(t(apply(df, 2, function(x) mean(x[x>0]))))
Ich kann nicht herausfinden, wie einfach die Werte in der Spalte mit der Mittelwert ohne Null ersetzen:
Um den Mittelwert ohne Null zu erhalten. Mein Ansatz ist so weit:
df$aye <- ifelse(df$aye == 0, 0, df2$aye)
df$bee <- ifelse(df$bee == 0, 0, df2$bee)
df$see <- ifelse(df$see == 0, 0, df2$see)
Aber das wird chaotisch mit vielen Variablen - wäre schön, es in einer Funktion zu wickeln.
Danke für Ihre Hilfe!
Prägnant und auf den Punkt. Mach weiter so! – akrun
Oder eine andere Option ist 'lapply (df, function (u) (!! u) * mean (u [u> 0]))' – akrun
Ja, es ist eine doppelte Negation, erste Negation gibt 0 Werte TRUE, also wieder negieren um es FALSCH zu machen, aber ich schätze deine Version ist viel besser – akrun