Führen Sie eine benutzerdefinierte Funktion für einen Datenrahmen in R nach Gruppe @ au
Bei der Erstellung einer benutzerdefinierten Funktion für eine Schleife über eine Gruppe in einem Datenrahmen treten Probleme auf.
Hier sind einige Beispieldaten:
set.seed(42)
tm <- as.numeric(c("1", "2", "3", "3", "2", "1", "2", "3", "1", "1"))
d <- as.numeric(sample(0:2, size = 10, replace = TRUE))
t <- as.numeric(sample(0:2, size = 10, replace = TRUE))
h <- as.numeric(sample(0:2, size = 10, replace = TRUE))
df <- as.data.frame(cbind(tm, d, t, h))
df$p <- rowSums(df[2:4])
Ich habe eine benutzerdefinierte Funktion erstellt, um den Wert w: @ zu berechne
calc <- function(x) {
data <- x
w <- (1.27*sum(data$d) + 1.62*sum(data$t) + 2.10*sum(data$h)) / sum(data$p)
w
}
Wenn ich die Funktion für den gesamten Datensatz ausführe, erhalte ich die folgende Antwort:
calc(df)
[1]1.664474
Idealerweise möchte ich Ergebnisse zurückgeben, die nach tm gruppiert sind,
tm w
1 result of calc
2 result of calc
3 result of calc
Bisher habe ich versucht mitaggregate
mit meiner Funktion, aber ich erhalte die folgende Fehlermeldung:
aggregate(df, by = list(tm), FUN = calc)
Error in data$d : $ operator is invalid for atomic vectors
Ich habe das Gefühl, ich habe das zu lange angestarrt und es gibt eine offensichtliche Antwort. Jeder Rat wäre dankbar.