2017-11-11 13 views
3

나는찾기 시간 차이

lf = structure(list(session_id = c(48L, 48L, 48L, 48L, 48L, 48L, 54L, 
54L, 54L, 54L, 54L, 54L, 72L, 72L, 72L, 72L, 72L, 74L, 74L, 74L, 
74L, 74L, 78L, 78L, 78L, 78L, 78L, 90L, 90L, 90L), datetime = structure(c(1457050110, 
1457050111, 1457050112, 1457050114, 1457050117, 1457050118, 1457052045, 
1457052048, 1457052050, 1457052051, 1457052052, 1457052054, 1457057067, 
1457057067, 1457057067, 1457057070, 1457057071, 1457058143, 1457058143, 
1457058144, 1457058149, 1457058150, 1457059193, 1457059193, 1457059195, 
1457059198, 1457059199, 1457063485, 1457063486, 1457063486), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), request = c(7, 7, 14, 20, 9, 4, 9, 
1, 12, 20, 6, 12, 4, 15, 8, 8, 12, 10, 6, 6, 13, 1, 5, 6, 20, 
1, 8, 3, 6, 13)), .Names = c("session_id", "datetime", "request" 
), row.names = c(NA, -30L), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame")) 

지금 내가 요구 한 쌍의 수행하는 함수 (request1을 request2)을 작성하고자하는 dataframe의 부분 집합이 입력과 나는이 코드를 사용하지만, 시간은 diff WRT 위치 인덱스를 찾는 stucked 한 원하는 출력 그림

을 업로드하고 같은 출력을 생성 : -

lf1 = lf %>% group_by(session_id) %>% do(positions = match(c(1,6),.$request),session_duration = max(.$datetime)-min(.$datetime)) 

과 같이 그 자체 EI는 위의 코드에서 요청 쌍 (1,6)의 인스턴스를했다하지만 작업

원하는 출력하고 함수를 작성하려면 : - 주어진 시나리오에서 enter image description here

답변

2

을, 당신은 걱정할 필요가 없습니다 명시적인 위치에 대해. 한 세션 내에서 (a) 범위 만 고려하고 (b) 한 세션 내에서 두 경계가 충족되는 경우를 고려합니다.

또한 실수로 그룹화 된 상태로 남겨둔 tibbles에주의하십시오. 나는 파이프/체인이 끝나기 전에 항상 ungroup()을 시도한다.

lf <- lf %>% 
    dplyr::ungroup() 

lf %>% 
    dplyr::filter(request %in% c(1, 6)) %>% 
    dplyr::group_by(session_id) %>% 
    dplyr::summarize(
    has_both_boundaries = (any(request==1) & any(request==6)), 
    session_duration = as.integer(difftime(max(datetime), min(datetime), units="secs")) 
) %>% 
    dplyr::ungroup() %>% 
    dplyr::filter(has_both_boundaries) %>% 
    dplyr::select(-has_both_boundaries) %>% 
    dplyr::right_join(
    lf %>% 
     dplyr::distinct(session_id), 
    by = "session_id" 
) 

는 생산 :

# A tibble: 6 x 2 
    session_id session_duration 
     <int>   <int> 
1   48    NA 
2   54    4 
3   72    NA 
4   74    7 
5   78    5 
6   90    NA 

당신은 세션 48, 72, & 90 그 빈 행 필요하십니까? 그렇지 않다면, 결론을 생략하십시오 right_join() 절.

+0

답변을 수락합니다.하지만 어쨌든 우리는 그들을 별도의 변수에 넣으면 위치에 intereseted입니다. – SumitArya

+0

별도의 변수로 무엇을 얻을 수 있습니까? 시간 값 또는 세션 ID 그것이 다른 게시물 일 수 있다고 생각하십시오. – wibeasley

+0

사실 나는 페이지 연결을 계산하는 수식을 가지고 있는데,이 연결에서 우리는 세션에서 일치하는 것을 찾은 위치를 사용합니다. 다른 게시물 일 것입니다. 좋아. 고마워. – SumitArya