R에는 요소 x
와 벡터가 v
있습니다. 나는에 요소의 첫 번째 인덱스를 찾으려면 v
그와 같다 x
. 이 작업을 수행하는 한 가지 방법은 다음 which(x == v)[[1]]
과 같습니다 . , 그러나 그것은 너무 비효율적입니다. 더 직접적인 방법이 있습니까?
보너스 포인트의 경우 x
벡터 인 경우 작동하는 함수가 있습니까? 즉, 그것은 각각의 요소의 위치를 나타내는 지표 벡터 돌려 x
하여 v
.
답변
이 함수 match
는 벡터에서 작동합니다.
x <- sample(1:10)
x
# [1] 4 5 9 3 8 1 6 10 7 2
match(c(4,8),x)
# [1] 1 5
match
요청한대로 첫 번째 일치 항목 만 반환합니다. 첫 번째 인수 값의 두 번째 인수 위치를 리턴합니다.
여러 개의 일치 %in%
하는 방법은 다음과 같습니다.
x <- sample(1:4,10,replace=TRUE)
x
# [1] 3 4 3 3 2 3 1 1 2 2
which(x %in% c(2,4))
# [1] 2 5 9 10
%in%
첫 번째 인수만큼 논리 벡터를 반환하며 TRUE
, 두 번째 인수에서 if 값을 찾을 수 있고 FALSE
그렇지 않은 경우 값을 반환합니다.
답변
Position
funprog {base} 의 함수 도 작업을 수행합니다. 임의의 함수를 전달하고 첫 번째 또는 마지막 일치를 반환합니다.
Position(f, x, right = FALSE, nomatch = NA_integer)
답변
위에서 언급 한 방법의 효율성에 대한 작은 참고 사항 :
library(microbenchmark)
microbenchmark(
which("Feb" == month.abb)[[1]],
which(month.abb %in% "Feb"))
Unit: nanoseconds
min lq mean median uq max neval
891 979.0 1098.00 1031 1135.5 3693 100
1052 1175.5 1339.74 1235 1390.0 7399 100
가장 좋은 것은
which("Feb" == month.abb)[[1]]
답변
R은 ==
벡터 건초 더미에서 바늘의 인덱스를 찾는 방법으로 double equals 연산자를 오버로드했습니다 . 건초 더미의 각 일치 값을 logical
포함 하는 벡터를 생성합니다 TRUE
.
예:
haystack <- c(1, 2, 4, 3, 4)
needle <- 4
indices <- needle == haystack
indices
[1] 3 5
haystack[indices]
[1] 4 4
둘 다 벡터 인 경우 작동하며 여러 벡터를 사용하도록 확장 할 수도 있습니다.