앞에서는 벡터가 무엇인지 알아봤다면 여기에서는 벡터를 조작하는 방법에 대해 알아보려고 한다.
잠시 쉬어가기 : https://kilhwan.github.io/rprogramming/ch-visualization.html
1. c()함수를 이용하여 벡터 생성하기
이미 알고 있는 것 처럼 괄호안의 자료를 나열함으로써 벡터를 생성할 수 있고 두 벡터를 이어붙이거나 해당 값의 이름을 붙일 수도 있다. 각각에 대해 알아보고 실습해 보자.
실습 벡터 생성하기
> x <- c(1, 3, 5, 7, 9) # 수치자료 벡터 > x [1] 1 ,3, 5, 7, 9 > s <- c('lee', 'kim', 'im') > s [1] "lee" "kim" "im" |
실습 두 백터 이어 붙이기
> c(x, c(11, 13)) # 위 실습을 하지 않고 하면 에러가 발생된다. 벡터는 같은 유형의 값을 가져야 한다는 것을 기억하자. [1] 1 ,3, 5, 7, 9, 11, 13 > s <- c(s, 'choi', 'part') > s [1] "lee" "kim" "im" "choi" "park" |
실습 원소의 이름과 값을 함께 입력하기
> x=c(x1=1, x2=2, x3=0) > x x1 x2 x3 # 이줄을 names라고 한다. 1 2 0 |
실습 위와 동일한 결과를 다른 형태(names()함수)로 실습하기.
> x=c(1,2,0) > names(x)=c('x1','x2','x3') > x x1 x2 x3 1 2 0 |
실습 수치와 문자 함께 생성하기
> t=c('Kim',20, 'Lee', 21, 'Park', 25) > t [1] "Kim" "20" "Lee" "21" "Park" "25" |
2. 콜론 “:” 이용하기
1씩 증가하는 자료 열을 생성하고자 할 때는 일일이 다 써주지 말고 콜론(초기값:최종값)을 사용하자.
실습 콜론 사용하기
> x=1:10; y=-2:2 > x; y [1] 1 2 3 4 5 6 7 8 9 10 [1] -2 -1 0 1 2 > z=0.5:4.8 > z [1] 0.5 1.5 2.5 3.5 4.5 |
3. seq()함수 이용하기
seq는 Sequence Generatond의 약어이다. “:”은 1씩 증가하는 수열을 생성했다. 임의로 값으로 증가 또는 감소하는 수열을 만들려면 “seq()” 함수를 이용해야 한다. 그리고 초기치와 최종치 사이를 n등분하여 수열을 생성할 때는 옵션 "length=n"을 사용한다.
형식 : seq(초기값, 최종값, by=증가값) 및 seq(초기값, 최종값, length=길이)
실습 0.5부터 4.8까지 0.2 씩 증가하는 수열 만들기
> x=seq(0.5, 4.8, by=0.2) > x [1] 0.5 0.7 0.9 1.1 1.3 1.5 1.7 1.9 2.1 2.3 2.5 [12] 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1 4.3 4.5 4.7 |
실습 2에서 1까지 0.1씩 감소하는 수열 만들기
> x=seq(2.0, 1.0, by=-0.1) > x [1] 2.0 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 |
실습 1부터 10 사이를 5등분 하기
> seq(1, 10, length=5) [1] 1.00 3.25 5.50 7.75 10.00 |
4. rep()함수 이용하기
rep는 Replicaton Elements of Vectors and Lists의 약어이다. 이 함수는 어떤 자료열을 반복해서 생성한다.
형식 : rep(자료벡터, times=n) 혹은 rep(자료벡터, n)
실습 반복 실습하기
> rep(c(1,2),times=3) [1] 1 2 1 2 1 2 > x=c(1,2); rep(x, 3) [1] 1 2 1 2 1 2 > rep('Hi! ', 3) [1] "Hi! " "Hi! " "Hi! " |
만약 times를 생략하면, times=1로 간주한다.
5. paste()함수 이용하기
이 함수는 문자열들을 결합하여 새로운 문자열 자료를 생성한다.
형식 : paste(문자열, 문자열, …, 문자열, sep=‘구분자’)
실습 문자열 결합하기
> paste('Hi,', 'my', 'R!', sep=' ') [1] "Hi, my R!" |
6. scan()함수 이용하기
이 함수는 콘솔을 통해 자료를 순차적으로 입력하거나, 자료 파일을 읽어드리는 함수이다.
형식 : scan(), scan(what="")
실습 수치자료 입력하기
> x=scan() 1: 2 2: 0 3: -1 4: # 여기서 엔터키 두 번 입력하면 끝마칠 수 있다. Read 3 items > xㅓ [1] 2 0 -1 |
실습 문자자료 입력하기
> s=scan(what="") #위에서 처럼 s=scan()만 사용하면 에러가 발생된다. 1: A 2: B 3: C 4: # 여기서 엔터키 두 번 입력 Read 3 items > s [1] "A" "B" "C" |
7. 연산자
이미 알고 있는 부분이라고 생각되어 간단한 실습만 해보도록 하겠다.
수치 연산과는 다르게 비교연산과 논리연산의 결과는 오직 “TRUE” 아니면 “FALSE” 이다.
실습 연산자 실습하기
> 1>2 [1] FALSE > x=1:10 > 1>2 || !2*2==4 [1] FALSE > x=1;y=2; x<2 & y>=2 [1] TRUE |
8. 수치함수
R에는 많은 수치함수들이 있다. 필요할 때 찾아서 사용하면 될 듯 하다.
9. 자료 벡터의 원소 지정과 치환
프로그래밍을 작성하다 보면, 주어진 자료 벡터의 원소들이 무엇인지 알아보거나, 참조 혹은 치환해야 하는 경우가 많다. 이 방법에 대해 알아보자.
1) 원소 지정(Indexing and Slicing)
원소의 지정은 변수 옆에 대괄호를 사용한다.
인덱싱: x[인덱스], x[ c(인덱스들) ]
슬라이싱 : x[ 시작:끝 ], x[ -인덱스 ] 와 같은 방식으로 접근한다.
한편 인덱스 앞에 “-”부호가 있으면 “해당 인덱스를 제외한 나머지”라는 의미이며, “x[]”는 x의 모든 원소를 지칭한다.
실습 원소 지정하기
> x=c(2, 1, 0, -1) > x[1] # x의 첫 번째 원소 [1] 2 > x[2:3] # x의 2, 3 번째 원소 [1] 1 0 > x[c(2,3)] # x의 2, 3 번째 원소 [1] 1 0 > x[c(3,1,4)] # x의 3, 1, 4 번째 원소 [1] 0 2 –1 > x[-c(2,3)] # x의 2,3 번째를 제외한 나머지 원소 [1] 2 –1 > x[] # x의 모든 원소 [1] 2 1 0 –1 |
2) 원소 치환(Substitution)
원소의 치환은 다음과 같이 한다.
x[ 인덱스 벡터 ] = 값 벡터 와 같은 방식으로 접근한다.
실습 원소 치환하기
> x=c(2, 1, 0, -1) > x[1]=0; x # x의 1번째 원소를 0으로 치환 [1] 0 1 0 -1 > x[c(2,3)]=c(-1,-2); x # x의 2,3번째 원소를 각각 –1, -2로 치환 [1] 0 -1 -2 -1 > x[c(3,1,4)]=c(0,1,1); x # x의 3,1,4번째 원소를 각각 0,1,1로 치환 [1] 1 -1 0 1 > x[]=2; x # x의 모든 원소를 2로 치환 [1] 2 2 2 2 |
3) 원소의 제거
벡터의 원소를 제거하는 특별한 함수나 명령어는 없다. 그러나 음의 인덱스를 이용하여 벡터의 원소를 제거하는 기능을 할 수 있다.
즉,
x = x[ -제거하고자 하는 인덱스 벡터 ]
x = x[ TRUE 및 FALSE 값 벡터 ]
실습 원소 제거하기
> x=c(2,1,0,-1) > x=x[-1]; x #x의 1번째 원소 제거 [1] 1 0 -1 > x=c(2,1,0,-1) > x=x[-c(2,3)]; x #x의 2,3번째 원소 제거 [1] 2, -1 > x=c(2,1,0,-1) > x=x[c(T,F,F,T)] #x의 2,3번째 인덱스는 FALSE 나머지는 TRUE로 지정 [1] 2, -1 |
※ 원소 지정시 True, False 대신에 T, F를 사용해도 된다.
10. 벡터의 연산
자료벡터의 연산은 원소별 연산으로 수행된다.
실습 산술 연산(덧셈,뺄셈)
> x=c(2,1,0,-1) > x+1 #산술 연산: 덧셈 [1] 3 2 1 0 > x-1 #산술 연산: 뺄셈 [1] 1 0 -1 -2 |
실습 산술 연산(곱셈,나눗셈,제곱)
> x=c(2,1,0,-1) > 2*x #산술 연산: 곱셈 [1] 4 2 0 -2 > x/2 #산술 연산: 나눗셈 [1] 1.0 0.5 0.0 -0.5 > x^2 #산술 연산: 제곱 [1] 4 1 0 1 |
실습 관계 연산
> x=c(2,1,0,-1) > x>0 #관계 연산 [1] TRUE TRUE FALSE FALSE > x>0 & x<=1 #논리 연산 [1] FALSE TRUE FALSE FALSE |
실습 함수 사용하기
> x=c(2,1,0,-1) > log(x) #로그 함수 사용 [1] 0.6931472 0.0000000 -Inf NaN > exp(x) #지수 함수 사용 [1] 7.3890561 2.7182818 1.0000000 0.3678794 |
길이가 같은 두 벡터의 연산은 직접 연산자를 사용할 수 있다.
실습 길이가 같은 두 벡터의 덧셈과 뺄셈
> x=c(0,1,1), y=c(2,-1,1) > x+y [1] 2 0 2 > x-y [1] -2 2 0 |
실습 길이가 같은 두 벡터의 곱셈과 나눗셈
> x=c(0,1,1), y=c(2,-1,1) > x*y [1] 0 -1 1 > x/y [1] 0 -1 1 |
실습 길이가 같은 두 벡터의 거듭제곱((x,y,z)^(a,b,c)=(x^a, y^b, z^c))
> x=c(0,1,1), y=c(2,-1,1) > x^y [1] 0 1 1 |
11. 벡터의 속성들
벡터의 속성은
• 자료의 유형: mode
• 길이: length
• 자료의 이름: names 가 있다.
두 자료벡터 x=c(x1=2, x2=1, x3=0, x4=-1, x5=3)와 a=c(a1='kim', a2='lee', a3='park', a4='choi')의 속성을 알아보자.
실습 속성 확인하기
> x=c(x1=2, x2=1, x3=0, x4=-1, x5=3) > a=c(a1='kim', a2='lee', a3='park', a4='choi') > x x1 x2 x3 x4 x5 2 1 0 -1 3 > a a1 a2 a3 a4 "kim" "lee" "park" "choi" > #자료의 유형을 알아보자. > mode(x) [1] "numeric" # 수치형 자료임을 말함. > mode(a) [1] "character" # 문자형 자료임을 말함. > #벡터의 길이 즉 자료의 개수를 알아보자. > length(x) [1] 5 > length(a) [1] 4 |
실습 원소의 이름 확인하기
> names(x) [1] "x1" "x2" "x3" "x4" "x5" > names(a) [1] "a1" "a2" "a3" "a4" |
'언어 > R' 카테고리의 다른 글
[R-007] 외부 데이터 불러오기, 저장하기 (0) | 2023.04.12 |
---|---|
[R-006] 데이터 프레임(Data Frame) (0) | 2023.04.04 |
[R-004] R 기본 문법 (0) | 2023.03.29 |
[R-003] 데이터 구조, 벡터 1 (0) | 2023.03.29 |
[R-002] R, RStudio 설치하기 (0) | 2023.03.28 |
댓글