【发布时间】:2017-12-06 23:09:01
【问题描述】:
我正在处理步态周期数据。我为每个 id 和步态试验标记了 8 个事件。 “LFCH”和“RFCH”值在每次试验中出现两次,因为它们代表左右腿步态周期的开始和结束。
示例数据框:
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
我想创造类似的东西
Total_gait_left = Frame[The last time Marks == "LFCH"] - Frame[The first time Marks == "LFCH"]
我当前的代码解决了这个问题,但取决于 Frame 值的位置,而不是 Marks 中的实际值。任何不遵循正常步态模式的人都会得到代码产生的错误值。
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)
您能否通过帮助我进行更改来帮助我使我的代码更稳定? Frame[4] 到 Frame[Marks=="LFCH" last time ]?
【问题讨论】: