해당 포스트는 R에서 벡터(vector) 내 동일 원소(vector)의 위치를 찾기 위하여
which
문과%in%
구문을 활용한 예제입니다.
개념 설명
1. which()
함수 which
는 TRUE
또는 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을 이용한 데이터 처리&분석 실무