[R] 벡터(vector)연산을 통한 동일 값/원소 위치 찾기

해당 포스트는 R에서 벡터(vector) 내 동일 원소(vector)의 위치를 찾기 위하여 which 문과 %in% 구문을 활용한 예제입니다.

개념 설명

1. which()

함수 whichTRUE 또는 FALSE로 이루어진 벡터(vector)를 인수로 받아서 TRUE 값을 가지는 index의 위치값을 반환합니다. (참고링크)

  • 예제 데이터 생성
which_ex <- letters[1:10] # a~j 까지 10개의 소문자 벡터 생성

which_ex
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
  • which_ex에서 'b'가 들어있는 위치 확인
which(which_ex == "b")
# [1] 2
  • which_ex에서 'f'가 들어있는 위치 확인
which(which_ex == "f")
# [1] 6

2. %in%

연산자 %in%은 어떤 값이 벡터에 포함되어 있는지 알려줍니다. (참고링크)

  • 'b'가 which_ex에 포함되어 있는가?
"b" %in% which_ex  
# [1] TRUE
  • which_ex에 'b'가 포함되어 있는가?
which_ex %in% "b" 
# [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • which_ex에 'b'의 위치는 어디인가?
which(which_ex %in% "b")
# [1] 2

Example 1 : 벡터에 포함된 값의 위치 찾기 (1)

1. 변수 생성 및 확인

A <- sample(1:10, 10) # 1부터 10까지 숫자 중 10개 랜덤 추출
A
# [1]  4  1  2  5  6  9  8  3 10  7

B <- sample(1:10, 5) # 1부터 10까지 숫자 중 5개 랜덤 추출
B
# [1]  5 10  8  6  7

2. A벡터에 포함된 B벡터의 원소값 위치 찾기

which(A %in% B)
# [1]  4  5  7  9 10

Example 2 : 벡터에 포함된 값의 위치 찾기 (2)

1. 변수 생성 및 확인

A <- sample(state.name, 50) # 국가명 50개 랜덤 추출 
A
# [1] "Minnesota"      "Mississippi"    "Ohio"           "Rhode Island"   "Alaska"         "Alabama"       
# [7] "Indiana"        "Georgia"        "Pennsylvania"   "Kansas"         "Massachusetts"  "Maine"         
# [13] "Tennessee"      "Arizona"        "Delaware"       "Nevada"         "Utah"           "Maryland"     
# [19] "Wyoming"        "Colorado"       "Oklahoma"       "Wisconsin"      "New Hampshire"  "Connecticut"   
# [25] "Washington"     "North Dakota"   "Virginia"       "Florida"        "Nebraska"       "Louisiana"     
# [31] "South Carolina" "New Mexico"     "Iowa"           "West Virginia"  "Texas"          "Vermont"       
# [37] "Hawaii"         "Idaho"          "New York"       "Kentucky"       "Arkansas"       "Oregon"       
# [43] "Michigan"       "South Dakota"   "North Carolina" "New Jersey"     "Montana"        "California"   
# [49] "Illinois"       "Missouri"     

B <- c(sample(state.name, 9), "South Korea") # 국가명 10개 생성
B
# [1] "Colorado"      "Georgia"       "Vermont"       "Pennsylvania"  "Delaware"      "New Hampshire"
# [7] "Idaho"         "Kentucky"      "Utah"          "South Korea"       

2. A벡터(50개의 국가명)에 포함된 B벡터(10개의 국가명) 위치 찾기

which(A %in% B)
#  [1]  8  9 15 17 20 23 36 38 40

3. 교집합(intersect) 이용한 벡터 비교

intersect(A, B) # A벡터와 B벡터의 교집합
# [1] "Georgia"       "Pennsylvania"  "Delaware"      "Utah"          "Colorado"      "New Hampshire"
# [7] "Vermont"       "Idaho"         "Kentucky"    

4. 차집합(setdiff)을 이용한 벡터 비교

setdiff(A, B) # A벡터와 B벡터의 차집합(A-B)
# [1] "Minnesota"      "Mississippi"    "Ohio"           "Rhode Island"   "Alaska"         "Alabama"
# [7] "Indiana"        "Kansas"         "Massachusetts"  "Maine"          "Tennessee"      "Arizona"
# [13] "Nevada"         "Maryland"       "Wyoming"        "Oklahoma"       "Wisconsin"      "Connecticut"
# [19] "Washington"     "North Dakota"   "Virginia"       "Florida"        "Nebraska"       "Louisiana"
# [25] "South Carolina" "New Mexico"     "Iowa"           "West Virginia"  "Texas"          "Hawaii"
# [31] "New York"       "Arkansas"       "Oregon"         "Michigan"       "South Dakota"   "North Carolina"
# [37] "New Jersey"     "Montana"        "California"     "Illinois"       "Missouri"

setdiff(B, A) # B벡터와 A벡터의 차집합(B-A)
# [1] "South Korea"

5. 합집합(union)을 이용한 벡터 비교

union(A, B)
# [1] "Minnesota"      "Mississippi"    "Ohio"           "Rhode Island"   "Alaska"         "Alabama"       
# [7] "Indiana"        "Georgia"        "Pennsylvania"   "Kansas"         "Massachusetts"  "Maine"         
# [13] "Tennessee"      "Arizona"        "Delaware"       "Nevada"         "Utah"           "Maryland"     
# [19] "Wyoming"        "Colorado"       "Oklahoma"       "Wisconsin"      "New Hampshire"  "Connecticut"   
# [25] "Washington"     "North Dakota"   "Virginia"       "Florida"        "Nebraska"       "Louisiana"     
# [31] "South Carolina" "New Mexico"     "Iowa"           "West Virginia"  "Texas"          "Vermont"       
# [37] "Hawaii"         "Idaho"          "New York"       "Kentucky"       "Arkansas"       "Oregon"       
# [43] "Michigan"       "South Dakota"   "North Carolina" "New Jersey"     "Montana"        "California"   
# [49] "Illinois"       "Missouri"       "South Korea"   

출처

[1] revolutionanalytics : how-to-choose-a-random-number-in-r
[2] R을 이용한 데이터 처리&분석 실무


banner-request-analysis