2012-07-07 2 views
1

각 샘플의 시작점을 나타내는 한 열을 사용하고 시작 지점 다음에 오는 점 (행)에 플래그를 지정하고 싶습니다. 최대 시간에 도달 할 때까지 재현 복사가 여기에있다행을 인덱싱 한 다음 다른 열에서 지정된 시간 프레임 내에서 그 다음에 오는 모든 값을 찾습니다.

> head(d) 
    Sample Seconds Value FLAG 
1  A  356  1 1 
2  A  357  1 NA 
3  A  358  9 NA 
4  A  359  4 NA 
5  A  400  1 NA 
6  A  401  3 NA 

:

d <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L 
), .Label = c("A", "B", "C"), class = "factor"), Seconds = c(356L, 
357L, 358L, 359L, 400L, 401L, 402L, 403L, 2955L, 2957L, 2959L, 
3001L, 3002L, 3004L, 2548L, 2549L, 2552L, 2553L, 2554L, 2555L, 
2556L, 2557L, 2558L), Value = c(1L, 1L, 9L, 4L, 1L, 3L, 7L, 2L, 
25L, 17L, 23L, 47L, 34L, 15L, 30L, 16L, 17L, 12L, 6L, 8L, 6L, 
6L, 5L), FLAG = c(1L, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, 
NA, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("Sample", 
"Seconds", "Value", "FLAG"), class = "data.frame", row.names = c(NA, 
-23L)) 

나는 각 샘플에 대한 데이터의 첫 번째 5 초 싶어 -

예를 들어

처럼 내 데이터 (d)는 보인다. 플래그는 샘플의 첫 번째 행을 나타냅니다 (이 점은 단순한 버전입니다. 실제 데이터는 시작점을 찾기 위해 플래그 핸들을 설정해야 함). 시작점 (Flag = 1)으로 행을 가져온 다음 d$Seconds으로 이동하여 시작점에서 5 초 이내에 각 행에 1 개의 값을 입력하고 싶습니다. 일부 샘플의 시작 지점이 4에서 6 초가되기 때문에 5를 더할 수 없습니다. 큰 데이터 세트로 작업 중이므로 for 루프를 피하려고합니다. 어떤 아이디어? (죄송 데이터 형식 - 나는 전에 게시하지 않은 그리고 그것은 나를 이미지를 만들어 보자 않을 것)

+0

참고로 [예제] (http://stackoverflow.com/q/5963269/324364)에서 예제를 재현 할 수있는 방법에 대한 질문을 참조하십시오. 일반적으로 화면에 인쇄 할 때 데이터가 어떻게 보이는지는 도움을 원하는 사람들에게는 실질적으로 쓸모가 없습니다. _more_ 쓸모 없더라도 실제 이미지 나 스크린 샷이됩니다. – joran

답변

1

여기 by를 사용하여 기본 R의 하나의 방법입니다 :

d$within5 <- unlist(
       by(
        d, 
        d$Sample, 
        function (x) x$Seconds <= (x$Seconds[!is.na(x$FLAG)]+5) 
       ) 
        ) 

결과 :

> head(d) 
    Sample Seconds Value FLAG within5 
1  A  356  1 1 TRUE 
2  A  357  1 NA TRUE 
3  A  358  9 NA TRUE 
4  A  359  4 NA TRUE 
5  A  400  1 NA FALSE 
6  A  401  3 NA FALSE 
관련 문제