Ich habe versucht, dies seit Wochen zu lösen, aber es scheint nicht zu bekommen.R - Conditional Lagging - Wie verzögert man eine bestimmte Anzahl von Zellen, bis eine Bedingung erfüllt ist?
Ich habe folgenden Datenrahmen:
post_id user_id
1 post-1 user1
2 post-2 user2
3 comment-1 user1
4 comment-2 user3
5 comment-3 user4
6 post-3 user2
7 comment-4 user2
und will eine neue Variable PARENT_ID erstellen. So dass für jede Beobachtung sollte es die folgenden Schritte durchführen:
- Überprüfen Sie, ob
post_id
entwederpost
odercomment
- ist Wenn
post_id
istpost
dannparent_id
sollte die frühestepost_id
des gesamten Datenrahmens entsprechen. - Wenn
post_id
ist der erste Eintrag dannparent_id
NA
- sollte gleich Wenn
post_id
istcomment
dannparent_id
zur erstenpost_id
gleich sollte es trifft.
Der Ausgang etwas aussehen sollte:
post_id user_id parent_id_man
1 post-1 user1 NA
2 post-2 user2 post-1
3 comment-1 user1 post-2
4 comment-2 user3 post-2
5 comment-3 user4 post-2
6 post-3 user2 post-1
7 comment-4 user2 post-3
Ich habe versucht, die folgenden:
#Prepare data
df <- df %>% separate(post_id, into=c("type","number"), sep="-", remove=FALSE)
df$number <- as.numeric(df$number)
df <- df %>% mutate(comment_number = ifelse(type == "comment",number,99999))
df <- df %>% mutate(post_number = ifelse(type == "post",number,99999))
#Create parent_id column
df <- df %>% mutate(parent_id = ifelse(type == "post",paste("post-",min(post_number), sep=""),0))
df <- df %>% mutate(parent_id = ifelse(parent_id == post_id,"NA",parent_id))
df <- df %>% select(-comment_number, -post_number)
Mit diesem Code ich in der Lage bin führen Schritte 1, 2 und 3, aber Schritt 4 ist jenseits von mir. Ich habe das Gefühl, dass eine bestimmte Art von konditionaler Verzögerung das Problem lösen könnte, aber ich weiß nicht, wie ich das machen soll.
Alle Ideen würden sehr geschätzt werden!
Bitte senden Beispiel Daten, gewünschte Ausgabe und Code, den Sie versucht haben. – mtoto
Danke für den Vorschlag @ Mtoto Ich denke, das sollte jetzt viel klarer sein. :) –