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.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage