2017-09-10 23 views
2

현재 동일한 길이가 아닌 다른 벡터 값 사이의 시퀀스를 만들려고합니다.두 벡터에서 특정 값 사이의 시퀀스 만들기

a<-c(1, 8, 14, 34, 46, 55) 
b<-c(3, 6, 12, 13, 18, 42, 49, 50, 57, 200) 

I는 a 값 여기 b (의 다음으로 높은 값의 시퀀스를 나타내고 세 번째 벡터를 생성하고자 : 1:3

나는 두 따르는 벡터와 B가 상상 1,2,3으로, 8:12을, 8,9,10,11,12으로, 14:1814,15,16,17,18으로하고, 마지막으로 55:5755,56,57으로한다.

mapply을 사용하여 원하는 결과를 얻지 못했습니다.

답변

6

우리는 'A'의 값과 기초하여 'B'를 서브 세트 findInterval을 사용하여 다음 Map는 'A'의 구성 요소와 'B'

의 하위 요소의 대응 서열 ( :=)를 얻을으로
Map(`:`, a, b[findInterval(a, b) + 1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57 
+0

안녕하세요, 저는 늦게 추가 문의 사항 : 코드가 내 데이터의 95 %를 잘 근무하고있다. 그러나 어떤 경우에는 (이전과 동일한 구조의 입력 데이터) 코드는 ".Primitive (": ") 점 (점 [[1L]] [[26L]], 점 [[2L]] [ [26L]]) : NA/NaN 인수 "output. 나는 이유를 알 수 없다. "NA/NaN Argument"는 처리 할 데이터가 없다고 말하는 것 같지만 이전 단계를 수동으로 확인했습니다. 그것에 대한 설명이 있습니까? – sant

+0

@sant 만약 당신이 NA/NaN 만있는 경우인지 확인할 수 있습니까? 이 경우, 'if/else' 조건을 사용하여 처리하십시오. – akrun

+0

예, 작동하지 않는 전체 목록이 있습니다. 예를 들어 첫 번째 게시물에서 a와 b를 가져옵니다. 두 개의 비슷한 구조로 구성된 목록을 실행하고 그 결과는 NA/NaN-Error입니다. if/else 조건을 포함시킬 방법을 지정할 수 있습니까? 고맙습니다! – sant

4
lapply(a, function(x) x:b[b>x][1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57