Ich habe eine Datentabelle mit Spalten id
, starts
, ends
, same_person
In Datentabelle, Vergleichen Zeilen und machen Berechnungen ohne Schlaufe in R
same_person
verwendet wird, um zu überprüfen, ob die Zeile die gleiche ID wie die hat, bevor .
library(data.table)
id = c(1,1,2,2)
starts = c(0,5,0,9)
ends = c(5,10,9,20)
same_person = c(0,0,0,0)
df <- data.table(id, starts, ends, same_person)
df
id starts ends same_person
# 1: 1 0 5 0
# 2: 1 5 10 0
# 3: 2 0 9 0
# 4: 2 9 20 0
Die erwarteten Ausgänge sind:
1.Compare id
die von zwei aufeinanderfolgenden Zeilen, und wenn sie gleich sind, wie same_person
1.
2.Bei die gleiche Person ersetzen, stellen die gleich starts
in die erste Reihe.
Ich verwendete 2 für Schleifen, um sie zu realisieren.
Zuerst habe ich überprüfe id
eine Zeile mit der Zeile vor, und wenn gleich, ersetzt same_person
als 1.
for (i in 2:nrow(df)){
if(df$id[i] == df$id[i-1]){
df$same_person[i] <- 1
}
}
df
id starts ends same_person
# 1: 1 0 5 0
# 2: 1 5 10 1
# 3: 2 0 9 0
# 4: 2 9 20 1
Basierend auf dem Ergebnis vor, ich starts
ändern, wenn sie die gleiche Person sind.
for (i in 1:nrow(df)){
if(df$same_person[i] == 1){
df$starts[i] <- df$starts[i-1]
}
}
df
id starts ends same_person
# 1: 1 0 5 0
# 2: 1 0 10 1
# 3: 2 0 9 0
# 4: 2 0 20 1
Da diese Datentabelle eine vereinfachte Version ist, dauert es nicht lange. Aber in meiner echten Arbeit braucht es viel.
Ich frage mich, ob ich die zwei Schritte ohne eine Schleife realisieren kann.
Was ist die erwartete Ausgabe – akrun
Die erwarteten Ergebnisse sind: 1. die 'id' von zwei aufeinander folgenden Reihen vergleichen und, wenn sie gleich sind,' same_person' als 1. 2. Für die gleiche Person zu ersetzen, machen Die Startzeit ist gleich der ersten Zeile. – Harold