[R] 벡터 다루기(입출력)
- R
- 2022. 4. 18.
R에서의 벡터에 대한 내용입니다.
벡터
벡터는 R의 기본 데이터 단위입니다.
원소(스칼라)가 하나이면 원자 벡터라고 합니다.
하나의 데이터 타입만이 가능하기 때문에 숫자형, 논리형, 글자형 중 하나로만 입력이 가능합니다.
c(...)으로 입력하면 벡터가 만들어집니다.
> c(1,2,3,4)
[1] 1 2 3 4
R에서의 모든 데이터는 key-value 방식이 가능해서 이름을 지정할 수 있다.
> c(a=1,b=2,c=3,d=4)
a b c d
1 2 3 4
강제형변환
벡터는 기본적으로 같은 데이터 타입만을 가질 수 있습니다. 그럼에도 다른 데이터 타입을 넣으면 오류가 뜨진 않고 강제로 데이터 타입을 고정시켜버립니다.
이것을 강제형변환이라고 합니다.
강제형변환이 되는 우선순위는
- 문자형
- 숫자형
- 논리형
으로 다양한 타입이 있어도 하나의 타입으로 바뀌게 됩니다.
# 문자가 있으면 문자형으로 지정됨
> vector = c(1,'T',F)
> typeof(vector)
[1] "character"
# 숫자+논리형이면 숫자형으로 지정
> vector1= c(1,T)
> mode(vector1)
[1] "numeric"
간단하게 숫자형 벡터 만들기
c()말고도 벡터를 만들 수 있는데 파이썬에서의 arrange 기능과 같습니다.
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
연산방식
위와 같은 방식의 벡터는 연산방식이 특이합니다.
10개 + 1개 데이터
1개의 데이터를 더하라 명하면 모든 스칼라에 값을 더합니다.
> 1:10+10
[1] 11 12 13 14 15 16 17 18 19 20
10개+ 다른길이(짝이 맞을때)
서로 다른 길이를 더할 수 있는데 짝이 맞으면 연속해서 더하게 됩니다. 이를 재활용 규칙이라고 합니다.
> 1:10 +1:5
[1] 2 4 6 8 10 7 9 11 13 15
그림으로 보면 1:5가 연속해서 더해지는 것이 어떤 것인지 볼 수 있습니다.
10개+다른길이(짝이 안 맞을 때)
짝이 안 맞아도 연산을 진행을 하기는 하지만 경고 메세지가 뜹니다. 안 되는 건 아닙니다. 그래서 필요하다면 그냥 하면 됩니다.
> 1:10 + 1:4
[1] 2 4 6 8 6 8 10 12 10 12
벡터 원소의 일부 가져오기
벡터 원소의 일부만 가져오는 방법입니다.
서브셋이라고 불립니다.
논리형(True,False)를 이용하거나 인덱싱을 이용합니다.
key(이름)을 지정했다면 key을 이용할 수도 있습니다.
논리형 사용
다음과 같이 sub라는 벡터를 만들었습니다.
sub =c('a','b','c','d','e')
이중에서 a,c,e 만 가져와 보겠습니다.
> sub[c(T,F,T,F,T)] # sub[c(T,F)]
[1] "a" "c" "e"
각 데이터 수에 맞게 T,F를 다 써주던지 R의 반복하는 방식을 이용합니다.
데이터 갯수보다 T,F가 많아지면 넘어가면 T에 한해서 Na 처리를 합니다.
> sub[c(T,F,T,F,T,F,T)]
[1] "a" "c" "e" NA
인덱싱 이용
벡터가 문자열일 때
벡터는 모두 보이지 않지만 인덱싱이 매겨져 있습니다.
이를 이용해 데이터를 불러올 수 있습니다. 입력한 인덱싱대로 출력됩니다.
참고로 파이썬은 0에서 인덱싱이 시작하지만 R은 1부터 인덱싱이 시작됩니다.
> sub[c(3,2,1)]
[1] "c" "b" "a"
음수의 개념도 파이썬과 다른데 인덱싱의 경우 음수를 취하면
그 인덱싱을 제외한 나머지를 불러오게 됩니다.
> sub[c(-1,-2)]
[1] "c" "d" "e"
1,2 인덱싱에 해당하는 a,b를 제외한 나머지가 불러왔습니다.
음수를 쓸 때는 조심해야 할 것은 양수와 섞어 쓰면 안됩니다.
sub[c(-1,2)]
인덱싱 범위가 넘어가면 NA처리를 합니다.
> sub[c(6)]
[1] NA
벡터가 숫자형일때
벡터가 숫자형일 때는 인덱싱 다루는 방법이 다채로워집니다.
- vector[n] : n번째 원소 출력
- vector[-n] : n번째 원소를 제외한 나머지 출력
- vector[조건문] : 조건문을 만족하는 원소 출력
- vector[a:b] : a~b까지 원소 출력
> vector = c(2,4,6,8,10,12)
> vector[3]
[1] 6
> vector[-2]
[1] 2 6 8 10 12
> vector[vector>5]
[1] 6 8 10 12
> vector[3:5]
[1] 6 8 10
key(이름)을 이용한 불러오기
이름을 지정해 불러오기를 해보겠습니다.
이름도 변수 선언에 해당합니다.
숫자를 맨 앞에 쓰면 안 됩니다.
변수 선언에 대한 자세한 내용은 해당 포스팅에서 확인해보시기 바랍니다.
https://seong6496.tistory.com/264
[R 변수선언 방법
프로그래밍은 변수 선언이 필수인데요. R에서도 변수 선언을 합니다. 그리고 R만의 변수 생성 규칙이 있습니다. 물론 프로그래밍 언어에 익숙하다면 당연한 얘기이긴 합니다. 변수 생성 규칙을
seong6496.tistory.com](https://seong6496.tistory.com/264)
다음과 같이 key-value 형식으로 벡터를 만들었습니다.
subs_name = c(a='k',b='kk',c='kkk',d='kkkk')
key로 1,3번째 데이터를 불러보겠습니다.
subs_name[c('a','c')]
데이터만 출력하기
앞에서는 모두 벡터형식으로 불러왔습니다.
하지만 이중대괄호를 쓴다면 데이터만 출력할 수 있습니다.
단, 데이터 1개씩만 불러올 수 있습니다.
인덱싱이든 key든 상관없이 가능합니다.
> subs_name[['a']] # subs_name[[1]]
[1] "k"
두개 이상을 불러오려고 하면 오류가 발생합니다.
subs_name[[c('a','b')]]
마치며
R의 벡터에 대해 알아보았습니다.
파이썬과는 약간 다른 방식도 있습니다.
데이터만 출력할 때 한개씩밖에 안 되는 불편함이 있긴 하지만
너무 어려워서 못 쓸 정도는 아닌 것 같습니다.
그럭저럭 쓸만하네요
관련 포스팅
R 변수선언 방법
'R' 카테고리의 다른 글
[R] 벡터 다루기(내장함수와 연산) (0) | 2022.04.28 |
---|---|
[R] 연산자 모음 (0) | 2022.04.26 |
R 데이터 타입 소개(종류, 타입확인) (0) | 2022.04.16 |
R 변수선언 방법 (0) | 2022.04.15 |
rstudio 패키지 설치 및 관리(googledrive 연동) (0) | 2022.04.13 |