R - Halten erste Beobachtung pro Gruppe identifiziert, die durch mehrere Variablen (Stata-äquivalent "by var1 var2 : halten, wenn _n == 1")

So habe ich aktuell vor einem problem in R, dass ich genau wissen, wie man mit in Stata, aber verschwendet haben über zwei Stunden zu erreichen, in R.

Verwendung der Daten.Bild unten, die Ergebnisse, die ich will, ist zu erhalten, die exakt die ersten Beobachtungen pro Gruppe, während die Gruppen gebildet werden, die von mehreren Variablen und sortiert werden, durch eine andere variable, d.h. die Daten.Rahmen mydata erhalten:

id <- c(1,1,1,1,2,2,3,3,4,4,4)
day <- c(1,1,2,3,1,2,2,3,1,2,3)
value <- c(12,10,15,20,40,30,22,24,11,11,12)
mydata <- data.frame(id, day, value)

Sollte umgestaltet werden:

   id day value   
   1   1    10 
   1   2    15 
   1   3    20 
   2   1    40 
   2   2    30 
   3   2    22 
   3   3    24 
   4   1    11 
   4   2    11 
   4   3    12 

Indem nur eine der Zeilen mit einem oder mehreren Gruppe-identificators (hier ist nur row[1]: (id,day)=(1,1)) Sortierung für den ersten Wert (also die Zeile mit dem niedrigsten Wert gehalten wird).

In Stata, würde dies einfach sein:

bys id day (value): keep if _n == 1

Fand ich eine Stück code auf der web -, die richtig funktioniert, wenn ich zuerst die Herstellung einer einzelnen Gruppe-id :

mydata$id1 <- paste(mydata$id,"000",mydata$day, sep="")  ### the single group identifier

myid.uni <- unique(mydata$id1)
a<-length(myid.uni)

last <- c()

for (i in 1:a) {
  temp<-subset(mydata, id1==myid.uni[i])
  if (dim(temp)[1] > 1) {
    last.temp<-temp[dim(temp)[1],]
  }
  else {
    last.temp<-temp
  }
  last<-rbind(last, last.temp)
}

last

Allerdings gibt es ein paar Probleme mit diesem Ansatz:

1. Ein einzelner Bezeichner erstellt werden muss (was schnell erledigt ist).

2. Es scheint wie eine schwerfällige Stück von code im Vergleich zu der einzigen code-Zeile in Stata.

3. Auf ein mittlerer Datensatz (unter 100.000 Beobachtungen gruppiert in viel zu 6) dieser Ansatz würde etwa 1,5 Stunden.

Gibt es eine effiziente entspricht Stata ist bys var1 var2: keep if _n == 1 ?

  • Ich bin ein Stata-person, aber ich würde nicht damit rechnen, Charme, R Benutzer hier durch, was impliziert, dass R ist lausig, selbst für eine detaillierte ganz Besondere Aufgabe zu. Besser zu implizieren, dass es eine ordentliche R Weg, es zu tun, nur, dass Sie nicht erkannt.
  • Ich wollte nicht zu beleidigen, in Richtung R, wenn es das ist, was es klingt. Ich habe in den Prozess der Migration von Stata für die letzten zwei Wochen und bin immer noch kämpfen, um die grundlegenden Funktionen Recht.
  • Für den Anfang bei der migration, während es möglich ist zu verwenden for loops effektiv in R, wenn es Ihr erstes resort, ist es vielleicht nicht die effektivste Weg, um zu gehen.
  • Kein Zweifel; ich bin einfach nur Beratung, wie die Menschen zu beeinflussen und Sie ermutigen, Ihre Frage zu beantworten.
InformationsquelleAutor iraserd | 2014-02-04
Schreibe einen Kommentar