R로 데이터 다루기

R에서 dplyr을 이용해 데이터를 추출, 가공하는 방법을 알아봅니다


수강중

5. 데이터 다루기를 위한 R 기본함수

head

데이터가 크다 보면 화면에 데이터프레임을 출력할 때 메모리 문제가 생기기 때문에 head를 이용해 처음의 5개의 데이터만 출력해 확인한다.

head를 이용해 처음부터 6번째 원소까지 출력한다.

head(1:50)
[1] 1 2 3 4 5 6

1:50으로 1에서 50까지 연속적인 수를 변수 x에 넣는다.

x = 1:50

5개만 슬라이싱해 확인한다.

x[1:6]
[1] 1 2 3 4 5 6

10 by 2 데이터 프레임을 만들어 변수 xy에 넣는다.

xy = data.frame(x = 1:10, y = 10:1)

head를 이용해 xy의 데이터를 확인한다.

head(xy)
  x y 
1 1 10
2 2  9
3 3  8
4 4  7
5 5  6
6 6  5

dim

dim의 차원을 뜻해 데이터프레임의 행과 열을 출력한다.

dim(xy)
[1] 10  2

nrow

데이터프레임의 행을 출력한다.

nrow(xy)
[1] 10

ncol

데이터프레임의 열을 출력한다.

ncol(xy)
[1] 2

table

만약 x = c('a', 'b', 'c', 'c', 'a') 가 있다면 table은 원소의 개수를 세어 테이블을 만들어준다.

벡터 c('A', 'B', 'C', 'C', 'A')를 만들어 x에 저장한다.

x = c('A', 'B', 'C', 'C', 'A')

table을 만들어 출력한다.

table(x)
x
A B C 
2 1 2 

nchar

nchar의 n은 개수를 나타내고 char는 캐릭터를 나타낸다. nchar()안의 갯수를 세어준다.

nchar('a')결과 1이 출력된다.

nchar('a')
[1] 1

nchar('ab')결과 2이 출력된다.

nchar('ab')
[1] 2

nchar('20140101')결과 8이 출력된다.

nchar('20140101')
[1] 8

substr

substr의 sub은 빼다, str은 string을 뜻한다. Substr('20140101', 1, 2)에서 1은 시작점이고 2는 끝나는 지점이다.

substr('20140101', 1,4)결과 2014가 출력된다.

substr('20140101', 1,4)
[1] "2014"

substr('20140101', 1,6)결과 201401가 출력된다.

substr('20140101', 1,6)
[1] "201401"

substr('20140101', 5,6)결과 01가 출력된다.

substr('20140101', 5,6)
[1] "01"

substr('20140101', 7,8)결과 01가 출력된다.

substr('20140101', 7,8)
[1] "01"

결측치

r에서는 NA는 결측치를 뜻한다. 측정을 못했거나 전산상의 오류로 모르는 비어있는 값이다.

간단한 벡터를 만든다.

x = c(1,2,3,NA)

결측치 처리

is.na

is.naNA가 있는 곳만 보여준다.

!

!를 사용해 결측치가 없는 데이터를 뽑는다. !not이라는 뜻이다.

is.na(x)의 결과가 TURE/FALSE로 반환된다. NA에 해당하는 데이터에 TRUE가 출력된다.

is.na(x)
[1] FALSE FALSE FALSE  TRUE

is.na(x)의 결과가 TUREx의 데이터가 출력된다.

x[is.na(x)]
[1] NA

!is.na(x)의 결과가 TURE/FALSE로 반환된다. NA에 해당하는 데이터에 FALSE가 출력된다.

!is.na(x)
[1]  TRUE  TRUE  TRUE FALSE

!is.na(x)의 결과가 TUREx의 데이터가 출력된다.

x[!is.na(x)]
[1] 1 2 3

매트릭스 상태일 때

xy의 2행2열 데이터값을 NA로 바꾼다.

xy[2,2] <- NA

데이터 프레임은 매트릭스 형식이기 때문에 xy[!is.na(xy$y), ] 로 하면, 행에 대한 조건은 xyyrk NA가 없는 행으로, 열은 모든 열을 출력한다.

xy[!is.na(xy$y), ]
   x  y 
1   1 10
3   3  8
4   4  7
5   5  6
6   6  5
7   7  4
8   8  3
9   9  2
10 10  1