I für jede Person eine Längs Datensatz mit wiederholten Beobachtungen haben:für jede Kombination von Reihen mit benutzerdefinierten Funktion zusammenzufassen
df <- data.frame(person= c(rep(1,5), rep(2,10)),
x= c(0,rnorm(14)),
y= c(0,rnorm(14)))
Ich habe eine benutzerdefinierte Funktion, die zwei x
und y
Werte als Eingabe und berechnet einen Wert , wie folgt aus:
myfunc <- function(x1, y1, x2, y2)
return(x1+y1+x2+y2)
ich möchte nun den Maximalwert (oder eine andere Statistik) aller Zeilenkombinationen eine Person hat zu finden.
Stellen Sie sich vor x
und y
sind geographische Standorte, die diese Person besuchte, myfunc
berechnet den Abstand zwischen zwei x/y-Koordinaten. Ich möchte die maximale Entfernung zwischen diesen Punkten finden.
Wie Sie sehen können, können meine Daten Nullen haben, wo ich die Werte x
und y
nicht kenne, diese Zeilen sollten übersprungen werden.
Dies sollte in einer Zusammenfassung sein, weil meine realen Daten viel mehr Variablen hat und ich fasse für diese auch zusammen.
So sollte der erste Teil sein:
result <- df %>% group_by(person) %>%
summarise(maxd = #maximum distance,
mind = #minimum distance,
......)
Mein erster Gedanke wäre dies mit expand.grid
irgendwie zu tun, alle möglichen Zeilenkombinationen zu erhalten:
row.combis <- expand.grid(i=1:6, j=1:6) # all row combinations
row.combis <- row.combis[row.combis$j < row.combis$i, ] # skip duplicates
und dann Schleife myfunc
über die row.combis
irgendwie.
Aber es muss einen klügeren Weg geben.
danke, ich wusste nicht über die integrierte dist-Funktion. Genau das möchte ich, aber wie werden die Nullen hier gehandhabt? – spore234
Wenn Sie sich auf die erste Zeile Ihres Datenrahmens beziehen, wo sowohl 'x' als auch 'y' Nullen sind, ist es nur ein normaler Punkt und wird genauso behandelt wie andere Punkte in der 'dist() 'Funktion. – Psidom
ok, aber die Nullen sind nur Platzhalter und bedeuten im Grunde genommen "NA". Ich will nicht falsche Max- und Min-Abstände basierend auf ihnen bekommen – spore234