2017-12-06 5 views
0

저는 보행주기 데이터로 작업하고 있습니다. 각 이드와 보행 트라이얼에 대해 8 개의 이벤트가 표시되어 있습니다. "LFCH"와 "RFCH"값은 왼쪽 다리와 오른쪽 다리의 보행주기의 시작과 끝을 나타 내기 때문에 각 시도에서 두 번 발생합니다.R dplyr - 다른 열의 특정 값의 위치를 ​​기반으로 한 열의 값을 선택하십시오.

샘플 데이터 프레임 : 나는 나의 현재 코드는 문제를 해결

Total_gait_left = Frame[The last time Marks == "LFCH"] - Frame[The first time Marks == "LFCH"] 

같은 것을 만들려면 고원,하지만 실제 값보다는 프레임 값의 위치에 따라 달라집니다

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 

점수. 정상적인 보행 패턴을 따르지 않은 개인은 코드에서 잘못된 값을 생성합니다.

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) 

예를 들어 코드를 변경하여 코드를 안정화하도록 도와 줄 수 있습니까? 프레임 [4] 프레임과 같은 것으로 [Marks == "LFCH"last time]?

답변

2

모두 LFCHRFCH 두 번 정확히 일어날 경우, 필터링 한 후 사용할 수 있습니다 diffsummarize에서 :

df %>% 
    group_by(ID, Gait_nr) %>% 
    summarise(
     left = diff(Frame[Marks == 'LFCH']), 
     right = diff(Frame[Marks == 'RFCH']) 
    ) 

# A tibble: 10 x 4 
# Groups: ID [?] 
#  ID Gait_nr left right 
# <int> <int> <dbl> <dbl> 
# 1  1  1 14 18 
# 2  1  2 14 18 
# 3  2  1 14 18 
# 4  2  2 14 18 
# 5  3  1 14 18 
# 6  3  2 14 18 
# 7  4  1 14 18 
# 8  4  2 14 18 
# 9  5  1 14 18 
#10  5  2 14 18 
1

dplyr 패키지의 firstlast을 사용할 수 있습니다.

library(dplyr) 

df2 <- df %>% 
    filter(Marks %in% "LFCH") %>% 
    group_by(ID, Gait_nr) %>% 
    summarise(Total_gait = last(Frame) - first(Frame)) %>% 
    ungroup() 
df2 
# # A tibble: 10 x 3 
#  ID Gait_nr Total_gait 
# <int> <int>  <dbl> 
# 1  1  1   14 
# 2  1  2   14 
# 3  2  1   14 
# 4  2  2   14 
# 5  3  1   14 
# 6  3  2   14 
# 7  4  1   14 
# 8  4  2   14 
# 9  5  1   14 
# 10  5  2   14