더북(TheBook)

데이터 접근과 그룹 연산

데이터 테이블은 데이터 프레임이 사용되는 대부분의 위치에서 문제없이 동작한다. 하지만 데이터를 접근할 때 사용하는 [ ]에는 몇 가지 주의를 기울여야 한다.

데이터 테이블의 데이터는 [행, 표현식, 옵션] 형태로 접근한다.6 행은 ‘행 번호’ 또는 ‘행을 선택할지를 나타내는 진릿값’으로 지정한다. 이는 데이터 프레임과 동일하다. 다음은 행 번호와 진릿값을 사용하는 두 경우의 예를 보여준다.

> DT <- as.data.table(iris)

> DT[1,]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1:          5.1         3.5          1.4         0.2  setosa

> DT[DT$Species == "setosa", ]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1:          5.1         3.5          1.4         0.2  setosa
2:          4.9         3.0          1.4         0.2  setosa
3:          4.7         3.2          1.3         0.2  setosa

데이터 테이블 접근 시 [ ]의 두 번째 인자에는 컬럼 이름을 그대로 적거나 컬럼 이름에 대한 표현식을 적는다. 여러 컬럼을 원할 경우에는 컬럼들을 리스트로 나열한다.

다음은 1행의 Sepal.Length 컬럼을 접근하는 예다. 컬럼명을 “Sepal.Length”가 아닌 Sepal.Length로 따옴표 없이 지정했음을 유의하기 바란다. 따옴표로 묶는 형식은 데이터 프레임에서 사용하는 문법이다.

> DT[1, Sepal.Length]
[1] 5.1

다음은 list( ) 안에 컬럼명을 나열하여 여러 컬럼을 접근한 예다.

> DT[1, list(Sepal.Length, Species)]
  Sepal.Length Species
1:         5.1  setosa

[ ]의 두 번째 인자로 ‘컬럼명을 사용한 표현식’을 사용할 수도 있다고 했다. 이 표현식은 다양한 연산이 될 수 있다. 다음은 Sepal.Length의 평균 및 Sepal.Length - Sepal.Width의 평균을 계산한 예다.

> DT[, mean(Sepal.Length)]
[1] 5.843333

> DT[, mean(Sepal.Length - Sepal.Width)]
[1] 2.786

6 데이터 테이블의 [ ] 연산자는 이 절에서 설명한 것보다 훨씬 많은 연산자를 지원한다. 이들에 대해서는 help(data.table)과 데이터 테이블 홈페이지(http://cran.r-project.org/web/packages/data.table/index.html)와 매뉴얼을 참고하기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.