Ich arbeite mit Gangzyklusdaten. Ich habe 8 Ereignisse für jeden ID- und Gangversuch markiert. Die Werte "LFCH" und "RFCH" treten bei jedem Versuch zweimal auf, da diese den Beginn und das Ende der Gangzyklen vom linken und rechten Bein darstellen.R dplyr - wähle Werte aus einer Spalte basierend auf der Position eines bestimmten Wertes in einer anderen Spalte
Beispieldatenrahmen:
df <- data.frame(ID = rep(1:5, each = 16),
Gait_nr = rep(1:2, each = 8, times=5),
Frame = rep(c(1,5,7,9,10,15,22,25), times = 10),
Marks = rep(c("LFCH", "LHL", "RFCH", "LTO", "RHL", "LFCH", "RTO", "RFCH"), times =10)
head(df,8)
ID Gait_nr Frame Marks
1 1 1 1 LFCH
2 1 1 5 LHL
3 1 1 7 RFCH
4 1 1 9 LTO
5 1 1 10 RHL
6 1 1 15 LFCH
7 1 1 22 RTO
8 1 1 25 RFCH
I Wold
Total_gait_left = Frame[The last time Marks == "LFCH"] - Frame[The first time Marks == "LFCH"]
Mein aktueller Code, um das Problem, wie etwas zu schaffen, wie löst, aber auf der Position der Rahmenwerte hängt eher als die tatsächlichen Werte in Marken. Jede Person, die nicht dem normalen Gangmuster folgt, hat falsche Werte, die durch den Code erzeugt werden.
library(tidyverse)
l <- df %>% group_by(ID, Gait_nr) %>% filter(grepl("L.+", Marks)) %>%
summarize(Total_gait = Frame[4] - Frame[1],
Side = "left")
r <- df %>% group_by(ID, Gait_nr) %>% filter(grepl("R.+", Marks)) %>%
summarize(Total_gait = Frame[4] - Frame[1],
Side = "right")
val <- union(l,r, by=c("ID", "Gait_nr", "Side")) %>% arrange(ID, Gait_nr, Side)
Können Sie mir helfen, meinen Code stabiler zu machen, indem Sie mir helfen, z. Frame [4] zu etwas wie Frame [Marks == "LFCH" beim letzten Mal]?