본문 바로가기

Lecture_Statistics

R 프로그래밍 기본

1. R은 object 단위로 관리하며, 모든 object는 class 를 갖는다. 

이를 설명하기 위해서는 R의 데이터 타입을 알아야 한다. R의 데이터 타입은 크게 문자형(character), 수치형(numeric), 논리형(logical), 복소수형(complex)이다. 이외에 NULL형이 존재하지만 해당 타입의 경우 NA, NaN, Inf와 묶어서 따로 설명하도록 하겠다.

 

내가 만든 object를 보고 싶다면 ls()라는 함수를 이용해 확인할 수 있다.

 

a <- 1
class(a)

b <- "A"
class(b)

d <- TRUE
class(d)

*여기서 사용한 class() 함수는 특정 object의 데이터 타입을 알아보기 위해 사용된 함수다.

 

 

다른 언어와 달리 R은 논리형에서 TRUE, FALSE만을 인정한다.

 

 

https://cceeddcc.tistory.com/2

 

R 데이터 구조 7가지 : 스칼라, 벡터, 팩터, 행렬, 배열, 리스트, 데이터프레임

R 데이터 구조1. 스칼라(Scala)2. 벡터(Vector)3. 팩터, 요인(Factor)4. 행렬(Matrix)5. 배열(Array)6. 리스트(List)7. 데이터프레임(Data.frame) 1. 스칼라(Scala)구성인자가 하나인 벡터 sc1 arr1 arr1, , 1 [,1] [,2][1,] 1 3[2,]

cceeddcc.tistory.com

https://ordo.tistory.com/6#google_vignette

 

 

2. R의 데이터 구조 _ Scala, Vector, Factor, Matrix, Array, List, DataFrame

그 중 Vector, Matrix, array, List, DataRame은 자료의 저장 방법이라고 할 수 있다.

 

#스칼라

벡터 중 구성 요소가 하나인 것.

A <- 1

 

 

#벡터

동일한 유형의 데이터가 1차원으로 저장돼 있는 것. 그러므로 문자와 숫자가 섞여서 저장될 경우 모두 문자로 저장된다.

B <- c(1, 3, 5)

 

 

그 중 수열 벡터를 만드는 방법은 간단하다.

 

  1. : 를 이용
  2. seq(from = 시작 지점, to = 절대 도달하면 안 되는 지점, by = 간격 크기)  /   seq(length= 요소 갯수, from= , by= )
  3. rep( 반복 대상, times = 반복 대상 전체를 n번 반복 옵션 OR each = 반복 대상 속 요소를 n번씩 반복)
  4. 문자벡터 LETTERS[ ]_대문자 영어 불러오는 배열    &    letters[ ] _ 소문자 영어 불러오는 배열

 

:    <- 시작과 끝 지점을 서술해주면 순차적인 수열 벡터를 생성해준다.

연산의 우선순위 때문에 같은 의도로 적은 코드도 서로 다른 결과가 나온다.

1:5


n=10
1:n-1
## 0 1 2 3 4 5 6 7 8 9

1:(n-1)
## 1 2 3 4 5 6 7 8 9

 

seq(-5, 5, by=1.5)
seq(length=5, from=-5, by=0.2)


x<-c("A", "B")
rep(x,times=5)

rep(x, each=5)
## [1] -5.0 -3.5 -2.0 -0.5  1.0  2.5  4.0
## [2] -5.0 -4.8 -4.6 -4.4 -4.2


## [3] "A" "B" "A" "B" "A" "B" "A" "B" "A" "B"
## [4] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B"

 

x1 <- "A is the first letter \n"
cat(x1)   #문자열 내 개행문자(\n)를 제외하고 값을 보여주는 함수
x2 <- "A is the \n first letter \n"
cat(x2)

paste(c("X", "Y"), 1:5, sep='-')
paste(c("X", "Y"), 1:5, sep='')
## [1] "A is the first letter \n"
## A is the first letter

## A is the 
##  first letter

## [1] "X-1" "Y-2" "X-3" "Y-4" "X-5"

## [1] "X1" "Y2" "X3" "Y4" "X5"

*cat(x1) = 문자열 내 개행문자(\n)을 제외하고 값을 보여주는 함수이다.

*paste(대상1, 대상2, sep='구분자')  = 문자열을 붙여주는 함수이다.

 

 

#Matrix by. matrix() 

동일한 유형의 데이터가 2차원으로 저장돼 있는 것으로, Array에 포함되는 형식이다.

matrix의 차원을 알고 싶을 때는 dim( )  & nrow( ) & ncol( ) 이라는 함수를 사용할 수 있다.

matrix의 곱은 %*% 라는 연산자를 사용한다.

matrix에 추가적인 row나 col을 붙이고 싶을 때는 rbind( ) & cbind( ) 를 이용하게 된다.

 

C <- matrix(c(1.1, 1.3, 1.3, 1.4), ncol=2, byrow=TRUE)

* matrix()는 벡터를 행렬로 만들어 준다.

**ncol 옵션은 칼럼 갯수를 지정해주고, byrow=TRUE라는 옵션은 행 단위로 저장되도록 지정해주는 것이다.

 

#Array 

같은 형태의 자료이지만 3차원 이상의 형태를 나타낼 때 사용하게 된다.

array(1:24, dim=c(3, 4, 2))

z <- 1:16
dim(z) <- c(2, 4, 2)

z[1, 1:2, 2]

 

## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24



## [1]  9 11

 

#data frame

다른 유형의 자료를 같은 길이의 형태로 만들 때 사용되며, 각 자료의 길이가 같은 list의 일종으로 볼 수 있다.

X1 <- 1:3
X2 <- c("A", "B", "C")

b1 <- data.frame(x1=X1, x2=X2)
b1    #각 열의 이름을 미리 설정 가능

b1$x1   #df 내 줄을 개별 선택 가능!
##   x1 x2
## 1  1  A
## 2  2  B
## 3  3  C




## [1] 1 2 3

 

 

#list

다른 유형의 자료를 다른 길이의 형태로 만들 때 사용할 수 있다.

data frame을 unclass할 경우 list 형태가 된다. 

b2 <- list(x1=1:5, x2=c("A", "B"))
b2


b3 <- unclass(b1)   #df를 unclass하면 list가 된다
## $x1
## [1] 1 2 3 4 5
## 
## $x2
## [1] "A" "B"

 

#Factor

범주형 변수(명목변수)를 처리하기 위한 type

state <- c("A", "B", "C", "D", "A", "C", "D", "A", "B")

class(state)

statef <- factor(state)
statef
## [1] "character"


## [1] A B C D A C D A B
## Levels: A B C D

원소를 읽으면서 범주를 파악함. 그래서 levels를 통해 이 범주를 보여주는 것 각 범주에는 1, 2, 3, 4라는 값을 할당하게 됨 A-1, B-2. C-3, D-4

 

**범주별 통계량 계산 함수 = tapply( )

income <- c(60, 59, 20, 49, 60, 39, 59, 48, 74, 28)
statef <- factor(c("A", "B", "C", "A", "C", "D", "A", "D", "C", "B"))
table(statef)

incmeans <- tapply(income, statef, mean)    ## statef 속 A, B, C, D라는 범주 별로 mean을 계산한다.
incmeans

 

 

3. 연산

숫자 벡터를 연산할 때는 각 요소의 길이가 같은지를 확인해야 한다.

만약 벡터 A와 벡터 B의 길이가 서로 배수 관계라면 자동으로 replication 기능을 이용해 계산해준다.

만약 서로 배수 관계가 아니라면 일단 replication을 이용해 가능한 계산까지 진행하지만 warning message가 뜬다.

x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
y <- c(x, 0, x)

x+x

x*x

x-x

x+y

 

 

그 외에도 다양한 계산 함수가 있다.

log( ), exp( ), sin( ), cos( ), tan( ), sqrt( )   -- 수학 연산 함수

min( ), max( ), length( ), range( ), prod( ), sum( )   -- 단순통계량 계산 함수

mean( ), var( ), sd( ) -- 통계량 계산 함수