MA VPD Tech Blog.

R 활용 사용법1

December 17, 2019 | 6 Minute Read

##R 활용 - 사용법(1/2)

작성 2019년 12월 17일 박영훈

1. R 패키지 사용


R의 큰 장점 중 하나는 구축해놓은 방대한 패키지이다.

install.packages(pkgs, dependencies) pkgs - 설치할 패키지명 dependencies - 기본값은 NA이며, pkgs가 동작하는 데 필요한 패키지를 설치한다. TRUE로 지정하면 이에 대해 패키지 제작자가 추천하는 패키지가 설치된다.

update.packages(ask = TRUE) ask - 기본값은 TRUE며, 각 패키지마다 설치 여부를 뭍는다. FALSE면 패키지를 확인 없이 업데이트한다.

library(package, help) package - 사용할 패키지명 help - 패키지에 대한 도움말을 보고자 할 경우 사용

2. R 데이터 타입

데이타 입력시 <- , =을 사용한다. (=는 최상위, <-는 어느곳에서나 사용 가능)

> mean(x <- c(1,2,3))
[1] 2
> x
[1] 1 2 3

> mean(x = c(1,2,3))
[1] 2
> x
Error : object 'x' not found
1) 스칼라 변수

스칼라란 단일 차원의 값을 뜻하는 것으로 숫자 1, 2, 3, …을 예로 들수 있다.

숫자
> a <- 3
> b <- 4.5
> c <- a + b
> print(c)
[1] 7.5
NA

NA는 데이터 값이 없음을 뜻한다.

> is.na(data)
[1] TRUE
NULL

NULL 객체를 뜻하며, 변수가 초기화 되지 않았을 때 사용한다.

문자열

R에는 한개 문자에 대한 데이터 타입이 없다. 문자열로 모든 것을 표현한다. > a <- “hello” > print(a) [1] “hello” > a <- ‘hello’ > print(a) [1] “hello”

진리값

TRUE, FALSE가 있으며 &, |, !을 사용할 수 있다.

팩터

범주형 데이타를 표현하기 위한 데이터 타입이다. 범주형 데이타란 데이터가 사전에 정해진 특정 유형으로만 분류되는 경우를 뜻한다. > sex <- factor(“m”, c(“m”, “f”)) > sex [1] m Levels: m f > nlevels(sex) [1] 2 > levels(sex) [1] “m” “f” > is.factor(sex) [1] TRUE > ordered(“a”, c(“a”, “b”, “c”)) [1] a Levels: a < b < c

벡터

R의 벡터는 슬라이스를 제공한다. 슬라이스란 배열의 일부를 잘라낸 뒤 이를 또 다시 배열처럼 다루는 개념을 뜻한다.

> nm <- c(1,2,3)
> names(nm) <- c("kim", "lee", "park")
> nm
 kim  lee park 
   1    2    3

벡터의 데이터를 접근하는 데는 색인을 사용하는 방법과 이름을 사용하는 방법이 있다.

> nm <- c(1,2,3)
> nm[1]
[1] 1
> nm[-1]
[1] 2 3
> nm[-2]
[1] 1 3
> nm[c(1,1)]
[1] 1 1
> x[1:2]
[1] 1 2
> x[1:3]
[1] 1 2 3

연속된 숫자로 구성된 벡터 생성

> seq(2,10)
[1]  2  3  4  5  6  7  8  9 10
> seq(5,10,2)
[1] 5 7 9
> 2:10
[1]  2  3  4  5  6  7  8  9 10
> 5:10:2
> rep(1:2, times=5)
 [1] 1 2 1 2 1 2 1 2 1 2
리스트

리스트는 Key, Value 형태의 데이타를 담는 연관 배열이다.

> x <- list(name="test", height=70)
> x
$name
[1] "test"

$height
[1] 70

리스트 데이타 접근

> x <- list(name=c("test","test1","test2"), height=c(70,80,90))
> x
$name
[1] "test"  "test1" "test2"

$height
[1] 70 80 90

> x$name
[1] "test"  "test1" "test2"
> x$height
[1] 70 80 90
> x[1]
$name
[1] "test"  "test1" "test2"

> x[[2]]
[1] 70 80 90
> x[[1]]
[1] "test"  "test1" "test2"
행렬

행과 열의 수가 지정된 구조이다. 행렬에는 한가지 유형의 스칼라만 저장할 수 있다.

> matrix(c(1,2,3,4,5,6,7,8,9), nrow=3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> matrix(c(1,2,3,4,5,6,7,8,9), ncol=3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

위의 예제는 열우선이고 행우선으로 지정하고 싶으면 옵션을 추가한다. 또한 행,열의 이름을 지정할 수 있다. > matrix(c(1,2,3,4,5,6,7,8,9), ncol=3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > matrix(1:9, nrow=3, dimnames=list(c(“r1”,”r2”,”r3”), c(“c1”,”c2”,”c3”))) c1 c2 c3 r1 1 4 7 r2 2 5 8 r3 3 6 9

행렬의 데이터에 접근은 다음과 같이 할 수 있다. > x<-matrix(c(1,2,3,4,5,6,7,8,9), ncol=3, byrow=TRUE) > x[1,1] [1] 1 > x[2,2] [1] 5 > x[1:2,] [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6

행렬의 연산은 다음과 같이 진행한다. > x2 [,1] [,2] [,3] [1,] 2 4 6 [2,] 8 10 12 [3,] 14 16 18 > x+x [,1] [,2] [,3] [1,] 2 4 6 [2,] 8 10 12 [3,] 14 16 18 > x %% x [,1] [,2] [,3] [1,] 30 36 42 [2,] 66 81 96 [3,] 102 126 150

배열

행렬이 2차원 데이터라면 배열은 다차원 데이타이다.

> array(1:12, dim=c(3,4))
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> array(1:12, dim=c(3,4,5))
, , 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,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 3

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 4

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 5

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

배열에 접근하는 방법은 다음과 같다. > x <- array(1:12, dim=c(3,4,5)) > x[1,2,3] [1] 4 > x[,,3] [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > dim(x) [1] 3 4 5

데이터 프레임

데이터 프레임은 처리할 데이터를 엑셀의 스프레드시트와 같이 표 형태로 구성한 모습을 하고 있다. > d <- data.frame(x=c(1:5), y=c(1:10)) > d x y 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 1 6 7 2 7 8 3 8 9 4 9 10 5 10

데이타 프레임의 구조를 살펴보기 위해서는 str 명령어를 사용한다. > str(d) ‘data.frame’: 10 obs. of 2 variables: $ x: int 1 2 3 4 5 1 2 3 4 5 $ y: int 1 2 3 4 5 6 7 8 9 10

데이타 프레임에 데이타를 삽입 또는 조회하기 위해 다음과 같이 진행해보자 > d$w <- c(1:5) > d x y w 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 1 6 1 7 2 7 2 8 3 8 3 9 4 9 4 10 5 10 5 > d$x [1] 1 2 3 4 5 1 2 3 4 5

타입변환

R의 형변환은 암시적으로 발생할 수 있고 이를 피할려면 옵션을 FALSE로 지정해야 한다. 강제변환을 할 경우에는 다음과 같은 메소드를 사용하도록 하자.

> x <-c("a","b","C")
> as.factor(x)
[1] a b C
Levels: a b C
> as.character(as.factor(x))
[1] "a" "b" "C"
> 
> y<-matrix(1:9, ncol=3, byrow=TRUE)
> as.data.frame(x)
  x
1 a
2 b
3 C
> data.frame(list(x=c(1,2), y=c(3,4)))
  x y
1 1 3
2 2 4



로고