Ich mag verschiedene Aggregationen in einer Schleife durchzuführen, um verschiedene Reihen Subsets meiner Daten angewandt werden, aber es scheint heikel (wenn überhaupt) zu erreichen:Kann ich mit Parametern aus Datenrahmen aggregieren?
t <- data.frame(agg=c(list("field1"=field1, "field2"=field2), ...),
fun=c(mean, ...))
f <- function(x) {
for (i in 1:nrow(t) {
y <- aggregate(x, by=t$agg[i], FUN=t$fun[i])
# do something with y
}
}
Ein Problem ist, dass das Feld Liste agg
löst einen Fehler beim Versuch, den Datenrahmen zu erstellen ("Objekt 'Feld1' nicht gefunden"), und das andere Problem ist, dass R nicht fun
einen Funktionswert zuweisen möchte ("kann Klasse nicht erzwingen" " Funktion "" zu einem data.frame ").
Anhang: Ein konkretes Beispiel für meine Daten (nur über die Definitionen entsprechen) könnte sein:
> d <- data.frame(field1=round(rnorm(5, 10, 1)),field2=letters[round(rnorm(5, 10, 1))], field3=1:5)
> d
field1 field2 field3
1 11 j 1
2 11 i 2
3 10 j 3
4 12 i 4
5 11 j 5
> with(d, aggregate(d$field3,by=list(field1, field2),FUN=mean))
Group.1 Group.2 x
1 11 i 2
2 12 i 4
3 10 j 3
4 11 j 3
Tricks mit den Variablennamen in dem Datenrahmen Spielen, ich diese noch erhalten:
> with(d,t <- data.frame(agg=c(list("field1"=field1, "field2"=field2)),fun=c(mean)))
Error in as.data.frame.default(x[[i]], optional = TRUE) :
cannot coerce class ""function"" to a data.frame
'by' Argument sollte einen Vektor der gleichen Länge wie' x' haben. Ist diese Bedingung erfüllt? Können Sie ein reproduzierbares Beispiel geben? –
Warum würden Sie anstelle einer Liste einen Datenrahmen dafür verwenden? – LAP
@Leo P: Ist _ "Warum würden Sie einen Datenrahmen anstelle einer Liste verwenden?" _ Bedeutet, dass Sie eine Lösung für eine Liste haben? –