2014-03-18 5 views
1

죄송합니다.이 질문이 모호하면 anser를 검색하여 찾을 수 없습니다.점의 벡터에서 연속 선 목록 만들기

x = c(1,2,3,4,5,6,7,8,9,10) 

y = c(T,T,T,F,F,T,T,F,F,T) 

은 내가 플로팅에 사용할 수있는 연속 벡터의 목록으로 "TRUE"포인트를 가입하려는 : 내가 이렇게 보이는 일부 데이터를 가지고있다. 즉, (약간의 여분의 패딩)과 같은 목록 :

$`1` 
[1] 0.5 3.5 

$`2` 
[1] 5.5 7.5 

$`3` 
[1] 9.5 10.5 

내가 for 루프에서이 작업을 수행 할 수 있습니다 알고 있지만, 나는 데이터 포인트를 많이 가지고 일부 스마트가 있는지 궁금 해요 대신 벡터 작업을 할 수 있습니다.

답변

2

rle를 사용하여 시도 :

ry <- rle(y) 
out <- split(x[y], rep(seq_along(ry$values), ry$lengths)[y]) 

#$`1` 
#[1] 1 2 3 
# 
#$`3` 
#[1] 6 7 
# 
#$`5` 
#[1] 10 

lapply(out, function(x) range(x) + c(-0.5,0.5)) 

#$`1` 
#[1] 0.5 3.5 
# 
#$`3` 
#[1] 5.5 7.5 
# 
#$`5` 
#[1] 9.5 10.5 
+0

정말 영리한, 대단히 감사합니다! – thc

관련 문제