본문 바로가기

R/R을 이용한 데이터 처리&분석 실무

(39)
데이터 분리 및 병합 이 절에서는 주어진 데이터를 조건에 따라 분리하는 split(), subset() 함수 그리고 분리되어 있는 데이터를 공통된 값에 따라 병합하는 merge() 함수에 대해서 설명한다. 데이터를 분리하는 함수를 사용하면 조건에 만족하는 데이터를 미리 선택할 수 있어 이어지는 처리를 쉽게 할 수 있다. 또, 분리된 데이터는 merge()로 재병합할 수 있다. 다음에 이들 함수의 특징을 요약했다. 함수 특징 split() 주어진 조건에 따라 데이터를 분리한다. subset() 주어진 조건을 만족하는 데이터를 선택한다. merge() 데이터를 공통된 값에 기준해 병합한다. split() split()은 조건에 따라 데이터를 분리하는데 사용한다ㅣ. -split : 주어진 기준에 따라 데이터를 분리한다. split..
apply 계열 함수 - 2 sapply() sapply()는 lapply()와 유사하지만 리스트 대신 행렬, 벡터 등의 데이터 타입으로 결과를 반환하는 특징이 있는 함수다. -sapply: 벡터, 리스트, 표현식, 데이터 프레임 등에 함수를 적용하고 그 결과를 벡터 또는 행렬로 반환한다. sapply( x, #벡터, 리스트, 표현식 또는 데이터 프레임 FUN, #적용할 함수 ..., #추가 인자. 이 인자들은 FUN에 전달된다. ) 예를 들어, 아이리스의 컬럼별로 평균을 구하는 경우를 살펴보자. 다음 코드에서 볼 수 있듯이 lapply()는 결과를 리스트로 반환하지만, sapply()는 벡터를 반환한다. >lapply(iris[,1:4], mean) $Sepal.Length [1] 5.84333 $Sepal.Width [1] 3...
apply 계열 함수 - 1 R에는 벡터, 행렬 또는 데이터 프레임에 임의의 함수를 적용한 결과를 얻기 위한 apply 계열 함수가 있다. 이 함수들은 데이터 전체에 함수를 한 번에 적용하는 벡터 연산을 수행하므로 속도가 빠르다. 다음은 apply 계열 함수를 요약한 것이다. 함수 설명 다른 함수와 비교했을 때의 특징 apply() 배열 또는 행렬에 주어진 함수를 적용한 뒤 그 결과를 벡터, 배열 또는 리스트로 반환 배열 또는 행렬에 적용 lapply() 벡터, 리스트 또는 표현식에 함수를 적용하여 그 결과를 리스트로 반환 결과가 리스트 sapply() lapply와 유사하지만 결과를 벡터, 행렬 또는 배열로 반환 결과가 벡터, 행렬 또는 배열 tapply() 벡터에 있는 데이터를 특정 기준에 따라 그룹으로 묶은 뒤 각 그룹마다 주..
데이터 프레임의 행과 컬럼 합치기 rbind()와 cbind()는 각각 행 또는 컬럼 형태로 주어진 벡터, 행렬, 데이터 프레임을 합쳐서 결과로 행렬 또는 데이터 프레임을 만드는 데 사용한다. 이들 함수는 분리되어 저장된 데이터를 합치는 데 유용하게 사용할 수 있다. 함수 의미 rbind(...) 지정한 데이터들을 행으로 취급해 합친다. cbind(...) 지정한 데이터들을 컬럼으로 취급해 합친다. 예를 들어, c(1,2,3), c(4,5,6)이라는 두 벡터는 r bind()를 사용해 각 벡터를 한 행으로 하는 행렬로 합칠 수 있다. >rbind(c(1,2,3),c(4,5,6)) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 마찬가지로 데이터 프레임 역시 rbind()를 사용하여 행을 합칠 수 있다. 다음은 2개 행을..
파일 입출력 이 절에서는 CSV로 저장된 외부 데이터 파일을 데이터 프레임으로 불러들이는 방법, 데이터 프레임을 CSV로 저장하는 방법을 설명한다. 프로그램 수행 중에 긴 시간이 소요되는 작업을 실행한 뒤에는 중간 중간 실행 결과를 저장해놓고 싶을 때가 있다. 이때 사용할 수 있는 R 객체를 바이너리 형태로 파일에 저장했다가 불러들이는 방법에 대해서도 설명한다. CSV 파일 입출력 CSV 파일을 데이터 프레임으로 읽으려면 read.csv()를, 데이터 프레임을 CSV로 저장하려면 write.csv()를 사용한다. 아래에 이 함수들의 프로토타입을 보였다. -read.csv : CSV 파일을 데이터 프레임으로 읽어들인다. read.csv( file, #파일명 geader=FALSE, #파일의 첫 행을 헤더로 처리할 것인..
아이리스 데이터 본격적으로 데이터 조작을 알아보기에 앞서, 앞으로 데이터 처리 및 기계 학습 기법의 예제로 사용할 아이리스(붓꽃(iris)) 데이터 셋에 대해 살펴보자. 아이리스는 통계학자인 피셔(Fisher)가 소개한 데이터로, 붓꽃의 3가지 종(setosa, versicolor, virginica)에 대해 꽃받침(sepal)과 꽃잎(petal)의 길이를 정리한 데이터다. 이 데이터는 R에 기본적으로 내장되어 있고, 이해하기 쉬우며 크기가 작고 기계 학습에서 인기 있는 분야 중 하나인 분류(Classification)에 적합한 데이터다. 이런 이유로 아이리스는 R뿐만 아니라 다른 데이터 분석이나 기계 학습 관련 라이브러리에서 자주 사용되고 있으므로 이 데이터를 알아두는 것 자체가 큰 의미가 있다. 아이리스의 각 행에 ..
함수의 정의 코드의 반복을 줄이거나 코드의 가독성을 높이려면 함수를 작성해 코드를 추상화해야 한다. 또, 함수를 작성하면 유닛 테스트를 사용해 해당 함수의 동작을 검증할 수 있다는 장점이 있다. 이 절에서는 사용자 정의 함수를 작성하는 방법에 대해서 살펴본다. 기본 정의 함수는 다음과 같은 기본 문법을 사용해 정의한다. fuction_namefibofibo(1) [1] 1 >fibo(5) [1]5 함수를 호출할 때는 인자의 위치를 맞춰서 값을 넘겨주는 방식, 인자의 이름을 지정해서 넘겨주는 방식 두 가지 모두 가능하다. 다음은 이 두 가지 방식을 모두 보여주는 예다. >ff(1,2) [1]1 [1]2 >f(y=1,x=2) [1]2 [1]1 그 외 함수 호출 방법을 대해 다양한 예를 '2.2 함수 호출 시 인자 지정'..
연산 이 절에서는 연산자와 벡터 연산, NA가 포함된 데이터에서의 연산에 대해서 알아본다. 연산자에서 특히 벡터 연산과 NA가 포함된 데이터를 다루는 방법은 다른 언어와 차이가 있는 부분이니 유의해서 보기 바란다. 수치 연산 지금까지 암시적으로 사용한 사칙연산(+,-,*,/)을 포함한 수치 연산에 대해 알아보자. 사칙 연산은 다른 언어와 크게 다르지 않지만 약간의 문법적 차이가 있다. 다음 표에 연산자와 함수를 정의했다. 연산자와 함수 의미 +,-,*,/ 사칙 연산 n %% m n을 m으로 나눈 나머지 n %/% m n을 m으로 나눈 몫 n^m n의 m승 exp(n) e의 m승 log(x,base=exp(1)) log_(base)(x). 만약 base가 지정되지 않으면 log_(e)(x)를 계산 log2(x)..