R에서 우리가 가장 흔하게 만들고 쪼개는 벡터(Vector)는 기본적으로 숫자나 문자들의 1차원 “나열”에 불과합니다. 하지만 분석을 단일 요소 수준으로 고도화하다 보면, 그저 단순한 값의 나열보다는 각각의 값(원소) 하나하나에 명시적인 “라벨(명찰)”을 붙여주어 사람이 식별하기 쉽게 만들어야 할 때가 반드시 옵니다.
예를 들어 [85, 92, 78] 이라는 수학 점수 벡터가 있다면, 아무 정보 없이 그냥 숫자를 나열하기보단 [철수=85, 영희=92, 민수=78] 처럼 값 위에 이름을 타이틀로 달아두면 나중에 특정 학생의 성적만 조회하거나 데이터를 병합(Join)할 때 직관적으로 코딩할 수 있을 것입니다. 오늘은 R에서 벡터 각각의 원소에 이름 레퍼런스를 부여하고, 이를 활용해 인덱싱하는 방법을 빠르게 짚어봅니다.
1. 기본 벡터의 현주소(이름 유무) 바로 확인하기
우리가 익히 알고 있는 보통의 c() 함수를 써서 무작정 데이터를 넣으면, 당연하게도 데이터의 이름이라는 메타데이터는 전혀 세팅되지 않은 벌거벗은 상태가 기본값(Default)이 됩니다.
my_vector <- c(1, 20, 300)
my_vector
> [1] 1 20 300
현재 대상 벡터에 부여된 이름표들을 일괄적으로 조회하려면 names() 함수를 겉에 씌워서 씁니다. 아직 이름을 하나도 안 달아줬으니 NULL(無의 존재로 비어있음)이 즉시 반환되죠.
names(my_vector)
> NULL
2. 벡터에 차근차근 명찰 달아주기 (Names 할당)
이제 names(데이터) <- c(...) 구조를 사용하여 변수의 특별한 라벨 저장 공간에 접근한 뒤, 벡터의 길이(원소의 개수)와 똑같은 개수의 문자열 벡터를 집어넣어 주면 각각의 짝이 맞는 이름표가 1:1로 착! 하고 달라붙게 됩니다.
names(my_vector) <- c("first", "second", "third")
my_vector
> first second third
> 1 20 300
출력해보면 밋밋하던 형태에서 멋들어지게 위쪽 열쇠(Key) 영역엔 명찰(라벨)이, 아래쪽 값(Value) 영역엔 실제 데이터가 함께 매칭되어 프린트되는 것을 볼 수 있습니다. 이로써 매우 견고해진 것입니다.
3. 부분 이름 변경 및 수정하기 (업데이트)
어랏? 열심히 치다 보니 세 번째 원소의 이름을 오타 내서 잘못 적었네요. 이미 전체 이름이 세팅되어 있어도 걱정 마세요. names()가 반환하는 영역 또한 일종의 리스트업된 벡터 공간이기 때문에, 대괄호 [인덱스번호]를 슬라이싱해서 쏙 뺀 후 새로운 단어만 콕 집어 갈아 끼울 수 있습니다.
# 원래 세번째 이름인 'third'를 'my_value'로 덮어쓰기!
names(my_vector)[3] <- "my_value"
my_vector
> first second my_value
> 1 20 300
이건 마치 헬스장 세 번째 이름표 락커룸을 열어서 안에 든 내용은 놔둔 채, 겉의 라벨만 새 이름표로 쓱 바꾸는 것과 똑같은 객체 지향적 원리입니다.
4. 이름을 활용한 우아한 데이터 추출 (다이렉트 인덱싱)
일부러 이렇게 긴 텍스트 명찰을 달아주면 무엇이 비즈니스적으로 가치가 있을까요? 바로 숫자 암기 없이 명칭으로 다이렉트 검색(슬라이싱)이 단번에 가능하다는 점입니다. 숫자를 손가락으로 세어가며 “두 번째 위치의 값을 뽑아줘!” 라고 my_vector[2] 라고 칠 필요 없이, 아예 내가 아는 이름 자체를 변수에 넣어 불러버릴 수 있습니다.
# 데이터의 순서가 뒤죽박죽 되어도 'second'라는 라벨만 찾으면 된다!
my_vector["second"]
> second
> 20
💡 선임 데이터 로거의 핵심 포인트
보통 R을 처음 입문할 때나 스크립트를 짤 때 1차원 단순 벡터에 일부러 이름을 일일이 붙일 일은 별로 없습니다. 하지만 곧이어 다루게 될 거대하고 복잡한 데이터 프레임(Data Frame)이나 티블 속 열(컬럼)들의 이름들을 일괄 접근해서 영어 등으로 바꿀 때, 오늘 배운 원리인names(데이터프레임) <- c("id", "score", "age"...)가 완전히 똑같은 로직으로 작동하게 됩니다. 반드시 위 작동 메커니즘 꼬옥 익숙해지길 강력히 추천합니다!
당신이 좋아할 만한 콘텐츠
by Google Adsense