ADsP/3과목

[3과목] 3-2. R 기초 (1) 변수& 벡터

RECORD WHO (레코드후) 2022. 9. 17. 21:28

[변수 기초]

1. 변수란? 

변수 : 변할 수 있는 숫자를 즉 자료를 보관 하는 그릇 (어떤 값을 임시로 보관해 놓기 위한 장소) 
변수명:  거기에다가 이름을 붙여 놓음으로써 이게 어떤 자료가 담긴 그릇인지 분별이 가능.

a <- 10  : a라는 변수에 10이라는 값을 저장
b <- a+20  : a라는 변수에서 20을 꺼내와서 b 변수에 넣어라
c <- a+b : a와 b의 값을 합해서 c에 저장
c : c에 저장된 값을 출력하라는 의미 
a <- "A" : A라는 A 라는 문자값을 저장! (문자값은 ""표시) 

* 위에서 a에는 10이 들어가 있었는데, "A"를 넣는다?? 
>>변수가 어떤 값을 가지고 있는데, 다른 값이 들어가면 이전 변수는 지워지고 새로운 변수로 대체됨! 

2. 명령어 구분은 세미콘론(;)

- 한 줄에서 명령어와 명령어를 구분 하려면 세미콜론 ; 사용
- 구분하지 않으면, 한 줄에 들어간 건 하나의 명령어로 파악됨

3. 변수 이름 규칙 : 변수명을 붙일 때는 규칙이 존재
1) 첫 글자는 무조건 문자 혹은 .(dot) 로만 시작 가능
- 숫자, 특수문자로는 시작 불가
- 첫 글자 이후에는 문자, 숫자, dot, 언더라인 사용 가능
2) 대소문자를 구별해서 입력 : 소문자로 만든 변수, 대문자로 만든 변수는 다른 변수로 인식됨 
ex) avg <-10 과 AVG<- 10 은 다른 변수로 인식 // val.a 와 val.A 도 다르게 인식 

바른 변수명 틀린 변수명
a
b
a1
.x
2a
.2
a-b


4. 변수에 값을 저장하는 법 (화살표, 등호) 
"<-" "=" 

5. 한번 만들어 사용한 변수는 R을 종료하기 전까지 사라 지지 않음 (우리가 지우지 않는 이상)  
변수에 있는 값을 보고 싶을 땐 , 
-변수 이름 타이핑 하고 엔터 
- print(변수이름) 하면 화면에 출력됨 

[R에서 사용할 수 있는 자료형(data type)]

자료형 예시 중요사항
숫자형 numeric 1,2,3,0.5,-10,pi 정수형, 소수, 실수형, 마이너스값
문자형 character "a" "TOM" "Apple" 한글자, 여러글자의 문자열 "a" "hello" 
논리형 TRUE, FALSE 반드시 대문자로 입력!
문자형과 다른 점은 ""가 붙지 않는다
T,F로 한글자로 줄여서 사용 가능
특수값 NULL 비어있는 값. 변수는 잆는데 값이 아무것도 없는 상태 
  NA 결측값(missing value) 값이 저장되어 있어야 하는데 빠져있는 상태 
  NaN 수학적으로 정의가 불가능한 값 
  inf, -inf 양의무한대, 음의 무한대  

[벡터]


1.벡터란? 
-같은 형태의 숫자가 연속되어 있는 '1차원 형태의 배열'을 저장할 수 있는 자료 구조
-벡터에 들어가는 연속되는 값은 반드시 동일한 타입!! 숫자만/ 문자만

**자료형이 다른 값을 묶어서 벡터로는 저장이 불가하고 숫자랑 문자 섞으면 숫자가 문자로 바뀌어서 저장됨
-r에서 쓰이는 용어
-수학적 의미의 벡터와 다루는 법 동일 
*즉, 변수에는 single value 뿐만 아니라 벡터(연속된 값)도 저장이 가능하다! 

v1<-10:100
vs2<-c(1,2,3,20:50) 
#10~100까지의수
#1,2,3이랑20~50까지의수


2.벡터를 변수에 저장하는 법

1) c함수: 벡터를 변수에 저장시킬 때 사용하는 함수


x <- c(1,2,3)  : 숫자형 벡터
y <- c("a", "b", "c") : 문자형 벡터
z<- c(TURE,TRUE,FALSE,TRUE) : 논리형 벡터 
x : x에 저장된 값을 출력하라는 의미 
print (y) : y에 저장된 값을 출력하라는 의미 


2) : 

앞 뒤 숫자 사이에 정수 표현, 연속된 숫자 입력시 사용, c함수 안에 같이 사용

v1 <- 50:90 = 50~90사이에 있는 정수 

v2 <- c(1,2,5, 50:90) = 1,2,5와 50~90사이의 정수 저장

 

3) seq (#시작값,종료값,간격)

- 일정한 간격의 숫자로 구성된 벡터

-시퀀스 sequence의 약자 

v3 <- seq(1,101,3)  1에서 부터 101의 사이의 값을 1에서 3씩 건너뛰면서 저장해라 

 

4) rep : 어떤 한 값을 반복해서 저장할 때 사용

- repeat의 약자

v5 <- rep(1,times = 5) 
v6 <- rep(1 : 5, times = 3)
v7 <- rep(c("a","b","c"), each = 3) 
v7 <- rep(c("a","b","c"), times =3) 
#1을 5번 반복해서 저장 
# 12345를 3번 반복
#벡터값 a,b,c를 각각 3번씩 반복 즉 "a" "a" "a" "b" "b" "b" "c" "c" "c" 
# a~c를 각각 3번씩 반복 즉 "a" "b" "c" "a" "b" "c"  "a" "b" "c" 

 

5) names : 벡터에 이름을 붙일 때 사용

score <- c(90,85,70) 
names(score) <- c("john,"tom","jane") 
socre [2] = 85
names(score) [2] = tom
#90,85,70 값을 score에 저장
#score 각각 원소값 순서대로 john, tom, jane 이라고 명명
#score 2번째 값
#score에 저장된 값의 이름 중 2번째 즉 tom

* 각각의 점수에 이름이 붙는 것. 값 자체에 영향을 주지 않음 그저 데이터를 이해하기 편하도록 라벨링을 한다고 이해

 

6) index [ ]  : 변수에 들어있는 특정 위치의 값을 지칭하는 숫자.

ⓐ 인덱스

-벡터에서 몇번째 값인 지 알려주고, 인덱스는 [1] 부터 시작

d <- c( 1,    4,     3,    7,    8) 
         d[1] d[2] d[3] d[4] d[5] 
---------------------------------------------------------------------------
d[1 : 3]

d[c(1,3,5)]
d[seq(1,5,2)] 
# d라는 값에서 1~3번째의 값을 한번에 출력
#d라는 값에서 1,3,5번째 값을 출력
#1번째~5번째의 값을 2개씩 띄어서 출력 

ⓑ Negative index : 변수에 들어있는 특정 위치의 값을 제외한 나머지 숫자. 

d [-2]             #2번째 값을 제외하고 나머지 모두 다 

d [-c(3:5)]      # 3~5번째 값은 제외하고 나머지 모두 다

 

3. 벡터에 적용가능한 함수들 

함수 의미
sum 백터 값들의 합
mean 벡터 값들의 평균
median 벡터 값들의 중앙값
max min 최댓값, 최소값
var 벡터 값들의 분산
sd 벡터 값들의 표준편차
sort 벡터 포함된 값을 정렬(오름차순이 기본)
range 벡터 포함값의 범위 (최소값~최대값)
length 벡터 포함값들의 개수(길이)

 

4. 벡터의 산술연산

1) 벡터 곱하기

d <- c( 1, 4,  3, 7, 8) 
2*d = 모든 원소에 곱하기 2
d-5 = 모든 원소에서 5를 빼기 

2) 두개의 벡터 합하기

*벡터의 길이가 동일하지 않을 땐, '벡터의 재활용 규칙' 짧은 벡터의 처음으로 돌아가 연산이 끝날때 까지 재활용

x <- c(1,2,3)
y<- c(4,5,6)
x + y : #대응하는 원소끼리 더하여 출력됨, 이 때 두 개의 벡터 길이는 같아야 함. 
z <- x + y  
z <- c(5,7,9) 

3) 벡터의 논리연선자 사용시 주의할 점

d <- c(1,2,3,4,5,6,7,8,9)

> sum(d>5)
[1] 4

[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE

* 6+7+8+9 의 값이 나올줄 알았지만 F / T 값으로 나오기때문에

T + T + T + T 즉 1 + 1 + 1 + 1 인 4가 결과로 나왔다.

sum의 값을 얻기 위해선? 

>sum(d[d>5])
[1] 30

** 관련문제) 다음 중 아래의 R코드 출력 결과?

m<-matrix(1:6,nrow=3)
m[m[,1]>1 & m[,2]>5,] ?

m
      [,1] [,2]
[1,]    1   4
[2,]    2   5
[3,]    3   6
m[,1]>1 의 논리연산자 값은 ->[1] FALSE TRUE TRUE
m[,2]>5 의 논리연산자 값은->[1] FALSE FALSE TRUE
m[,1]>1&m[,2]>5 의 논리연산자 값은->[1] FALSE FALSE TRUE
이것은 다음과 같습니다.m[c(FALSE,FALSE,TRUE),] -> 이것은 m의 구성요소 중 TRUE가 있는 위치 요소를 의미합니다.
결국 m[3,] 를 의미합니다.