sourcecode

벡터의 n번째 요소마다 추출

codebag 2023. 6. 7. 22:47
반응형

벡터의 n번째 요소마다 추출

저는 각 요소가 다음과 같은 벡터를 만들고 싶습니다.i+6th다른 벡터의 요소.

예를 들어, 길이 120의 벡터에서 나는 각 요소가 값인 길이 20의 다른 벡터를 만들고 싶습니다.i, i+6, i+12, i+18...초기 벡터, 즉.저는 원본의 6번째 요소를 모두 추출하고 싶습니다.

a <- 1:120
b <- a[seq(1, length(a), 6)]

(이미 언급한 seq 솔루션 이상의) 순차적인 조각을 얻는 또 다른 방법은 짧은 논리 벡터를 사용하고 벡터 재활용을 사용하는 것입니다.

foo[ c( rep(FALSE, 5), TRUE ) ]

제 생각에 당신은 반드시 같지는 않은 두 가지를 묻고 있는 것 같습니다.

원본의 6번째 요소를 모두 추출하고 싶습니다.

시퀀스를 인덱싱하여 이 작업을 수행할 수 있습니다.

foo <- 1:120
foo[1:20*6]

저는 각 요소가 다른 벡터의 i+6번째 요소인 벡터를 만들고 싶습니다.

이를 위한 쉬운 방법은 논리적 요인을 FALSE로 보완하는 것입니다.i+6:

foo <- 1:120
i <- 1
foo[1:(i+6)==(i+6)]
[1]   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119

i <- 10
foo[1:(i+6)==(i+6)]
[1]  16  32  48  64  80  96 112

벡터의 시작 위치에서 모든 n번째 요소를 선택하는 방법

nth_element <- function(vector, starting_position, n) { 
  vector[seq(starting_position, length(vector), n)] 
  }

# E.g.
vec <- 1:12

nth_element(vec, 1, 3)
# [1]  1  4  7 10

nth_element(vec, 2, 3)
# [1]  2  5  8 11

오프셋/쉬프트가 f=0,...,n-1인 모든 n번째 요소를 선택하려면 다음을 사용합니다.

vec[mod(1:length(vec), n)==f]

물론, 이것을 멋진 기능으로 포장할 수 있습니다.

nth_element <- function(vec, interval, offset=0){
    vec[mod(1:length(vec), interval)==mod(offset, interval)]
}

언급URL : https://stackoverflow.com/questions/5237557/extract-every-nth-element-of-a-vector

반응형