2012-04-16 2 views
1

시퀀스의 끝과 시작점을 찾고 싶은 긴 데이터 프레임이 있습니다. 내가 원하는 것은 비 제로의 전환에 0과 0으로 모든 비 제로를 찾을 수있는 방법입니다data.frame에서 시퀀스의 시작과 끝 찾기

b = c("a","c","a","c","e", "a","c","a","c","a" ,"c","a","c","a","c" ,"d","d","d","d","d") 
a = c(0,0,0,0,1, 4,0,0,0,0, 5,1,6,0,0, 0,10,0,0,0) 
df = data.frame(a,b) 

간단합니다.

lapply을 사용하여 함수를 호출하고 이전 호출에서 값을 저장하면됩니다.

행 N과 행 N + 1, 또는 더 나은 아직 행 N 열 N + M 내 함수 또는 뭔가 더 나은 보일 것이라고 좀 더 우아한 찾고 있어요.

+2

'rle (Data $ a == 0)'을 통해 찾을 수 있지만 최종 목표에 따라 순서를 그룹화하는 더 유용한 방법이있을 수 있습니다. –

+0

Joshua의 코멘트에 대해 자세히 설명하면 :'Data $ a == 0'은 0에 대해 논리적 1을 반환하고 다른 모든 것에 대해서는 논리적 0을 반환하므로'rle'의 결과를 원하는대로 정확하게 만듭니다. –

답변

0

아마도 이것이 원하는 것일까요? 그것은 우아하지 않을 수도 있지만 설명하는 전환을 감지해야합니다.

> lagn <- function(x, n) { c(rep(NA,n), x[1:(length(x)-n)]) } 
> df$c <- lagn(df$a, 1) 
# mult ensures one of the item is zero, add ensures one of the item was nonzero 
> df[which((df$a*df$c)==0 & (df$a+df$c)!=0),] 
    a b c 
5 1 e 0 
7 0 c 4 
11 5 c 0 
14 0 a 6 
17 10 d 0 
18 0 d 10 
관련 문제