Ich möchte doppelte Zeilen aus einem Datenrahmen entfernen, der durch verschiedene FATORS und Bedingungen, wie höchsten Mittelwert oder SD, geschichtet ist.Entfernen Sie doppelte Zeilen abhängig von Faktor
Einige Daten, a
ist der Faktor und die ID für die Zeilen.
set.seed(13654)
a<- sort(c(1,1,4,1,2,3,2,3,1,5))
b<- matrix(runif(100,min = 6,max = 14),nrow = 10)
c<- data.frame(a,b)
Zum Beispiel möchte ich den endgültigen Datensatz in den Zeilen mit dem höchsten Mittelwert reduzieren.
# calculate means per row
gr <- cbind(a,M=rowMeans(c[,-1]))
# get rows stratified by a with highest mean:
gr1 <- aggregate(M~a,gr,which.max)
gr1
a M
1 1 3
2 2 2
3 3 1
4 4 1
5 5 1
Somit wird die dritte Reihe des Faktors Ebene 1, die zweite Zeile des Faktors Ebene 2, ... sollen in den neuen Datenrahmen aufgenommen werden. Ich möchte Schleifen vermeiden. Was ich versuchte, ist split
die Daten und dann lapply
verwenden, aber nicht so weit gearbeitet.
cl <- split(c,a)
# this function does not work it will select not the correct rows.
lapply(cl, "[", gr1,)
Mein Endziel ist eine Funktion wie folgt aus:
remove.dupl <- function(data,factor,method=c(highest.mean,highest.sd,lowest.sd,...))
Können Sie einige tipps oder eine Lösung für mein Problem. Nach meinem Workflow benötige ich ein "How-to", um "["
korrekt mit lapply zu verwenden, um verschiedene Zeilen aus einer Liste von Datenrahmen auszuwählen.
Vielen Dank, aber ich ziehe eine Basis R Lösungen. Aber ich behalte das im Hinterkopf. – Jimbou
@Jimbou np, hinzugefügt eine alternative Basis R-Lösung sowie – Jaap
Wie würden Sie Ihre'Ave'-Funktion zu optimieren, wenn Sie doppelte entfernen müssen? Z.B. Das 'max (x) == x 'gibt nur' TRUE' oder mehr als ein 'TRUE' zurück. – Jimbou