[ADP] R-기초(2) : R 기초통계연산 / R 데이터 핸들링(인덱싱, 슬라이싱) / 반복문과 조건문

2020. 7. 13. 15:46ADP | ADsP with R/Knowledge

 R언어와 사용법에 관한 게시글들은 "한국 데이터 산업진흥원"에서 출간한 국가공인 ADP/ADsP자격증을 위한 "데이터 분석 전문 가이드"에 서술된 수준에 한정지어 다루어 볼 것입니다.

 ADP필기 준비를 위한 R의 기본적인 문법과 패키지들을 학습을 목표로 합니다.   


1. R의 기초통계연산

 

1) 수열 생성하기


※ rep()

rep(1,3)

결과 : 1 1 1

rep(a,b) - a를 b번 반복한다

rep(2:5, 3)

결과 : 2 3 4 5 2 3 4 5 2 3 4 5

rep(a:b,c) - a부터 b까지를 c번 반복한다


※ seq()

seq(1,3)

결과 : 1 2 3

seq(a,b) - a부터 b까지를 1씩 증가하는 수열을 만든다

seq(1,11, by=2)

결과 : 1 3 5 7 9 11

seq(a,b, by = c) - a부터 b까지를 c씩 증가하는 수열을 만든다

seq(1,11,length=6)

결과 : 1 3 5 7 9 11

seq(a,b, length = c) - a부터 b까지 전체 수열의 개수가 c개가 되도록 자동적으로 증가하는 수열을 생성한다..


2) 기초적인 수치 계산

※ 벡터의 연산

a = 1:10

- 변수 a에 1부터 10까지 1씩 증가하는 벡터를 대입

a

결과 : 1 2 3 4 5 6 7 8 9 10

- a의 값을 출력한다.

a + a

결과 : 2 4 6 8 10 12 14 16 18 20

- 길이가 같은 벡터의 같은 위치끼리 더한다.

a - a

결과 : 0 0 0 0 0 0 0 0 0 0 

- 길이가 같은 벡터의 같은 위치끼리 뺀다.

a * a

 

결과 : 1 4 9 16 25 36 49 64 81 100

- 길이가 같은 벡터의 같은 위치끼리 곱한다.

a / a

결과 : 1 1 1 1 1 1 1 1 1 1

- 길이가 같은 벡터의 같은 위치끼리 나눈다.


※ 벡터의 변환

a = c(2,7,3)
a

- R에서는 기본적으로 열벡터가 생성된다.

t(a)

- t()로 벡터/행렬의 전치를 구할 수 있다.

A = a %*% t(a)

- %*% 는 행렬곱 연산이다.


※ 행렬의 연산

mx = matrix(c(23,41,12,35,67,1,24,7,53), nrow = 3)
mx

- 9개의 데이터를 가지고 3행짜리 행렬을 생성하였다.

5 * mx

- 행렬에 스칼라를 곱한다.

solve(mx)

- 행렬 mx의 역행렬을 구한다.


※ 기초 통계량

a = 1:10
a

- 1부터 10까지 1씩 증가하는 값을 가진 변수 a를 생성한다. 

mean(a)

- 변수 a의 평균을 구한다.

var(a)

- 변수 a의 분산을 구한다.

sd(a)

- 변수 a의 표준편차를 구한다.

sum(a)

- 변수 a의 원소의 합계를 구한다.

median(a)

- 변수 a의 중간값을 구한다.

log(a)

- 변수 a의 로그값을 구한다.

b = log(a)
cov(a,b)

- 변수 a,b간의 공분산을 구한다.

cor(a,b)

- 변수 a,b간의 상관계수를 구한다.

summary(a)

- 변수 a의 4분위값과 최대값, 최소값을 구한다.


2. R의 기초 데이터 핸들링

여기서 기초 데이터 핸들링이란, R의 인덱싱과 슬라이싱 문법에 대해서 알아보는 것이다.

1) 벡터형 변수

b = c("a","b","c","d","e")
b

- a~e까지 포함된 텍스트 벡터를 생성하였다.

b[2]

- 벡터 내에서 2번째 해당하는 값을 가져온다

b[-4]

- 벡터 내에서 4번째 해당하는 값만 제외하고 가져온다

b[c(2,3)]

벡터의 2,3위치 값을 가져온다.


2) 행렬 / 데이터 프레임 변수

기본적인 인덱싱 슬라이싱은 위의 벡터와 동일하다, [c(a,b)], [-a], [a,b], [a:b]를 사용할 수 있다. 

income = c(100,200,150,300,900)
car = c("kia","hyundai","kia","toyota","lexus")
marriage = c(FALSE,FALSE,FALSE,TRUE,TRUE)
mydat = data.frame(income, car, marriage)
mydat

- 각각 다른 타입의 벡터를 생성하여, 하나의 데이터 프레임으로 합쳤다.

mydat[3,2]

- 3행 2열의 데이터를 가져온다.

mydat[,2]

- 2열의 모든 데이터를 가져온다.

mydat[4,]

- 4행의 모든 데이터를 가져온다.

mydat[-1]

- 1열을 제외한 모든 데이터를 가져온다.

mydat[-2,-3]

- 2행과 3열을 제외한 모든 데이터를 가져온다.


3. 반복문과 조건문

1) for 반복문

a = c()       # 빈 a벡터 선언
for (i in 1:9) {                     # i가 1부터 9까지 1씩 증가
    a[i] = i *i                      # a의 i번째 원소에 i제곱을 대입
}

a
    

- 기본적으로 파이썬의 for문 형태와 비슷하다. 하지만 c언어처럼 괄호가 쓰인다.

isum = 0 
for (i in 1:100) {
isum = isum + i
}

cat("1부터 100까지 합=",isum,"입니다.")


2) while 반복문

x = 1
while (x<5) {                # 조건에 괄호 필수
x = x + 1
print(x)
}

- R은 기본적으로 반복문에서 조건을 넣는 부분에 괄호가 항상 들어가야한다.


3) if ~ else 조건문

StatScore = c(88,90,78,84,76,68,50,48,33,70,48,66,88,96,79,65,27,88,96,33,64,48,77,18,26,44,48,68,77,64,88,95,79,88,49,30,29,10,49,88)
over70 = rep(0,40)
for (i in 1:40){
  if (StatScore[i] >= 70) over70[i] = 1
  else over70[i] = 0 }

over70
sum(over70)

 

- if ~else 조건문에 따라 70점이 넘을경우 over70의 index를1로 바꾸었다.