더북(TheBook)

지금까지는 컬럼명을 그대로 코드에 작성했다. 만약 데이터 테이블에서 [ ]의 두 번째 인자로 컬럼명을 담은 문자열 또는 컬럼 번호를 지정하고자 한다면 with=FALSE 옵션을 주어야 한다. 그렇지 않으면 두 번째 인자로 지정한 문자열 또는 컬럼 번호가 그대로 ‘연산식’으로 취급되기 때문이다.

> DT <- as.data.table(iris)
> head(iris)
  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
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> iris[1, 1]  # (1, 1) 위치의 값이 제대로 구해짐
[1] 5.1

> DT[1, 1]    # 첫 번째 1에 의해 데이터의 첫 행이 구해지고 두 번째 1에 의해 1이 출력됨
[1] 1

> DT[1, 1, with=FALSE]  # with=FALSE를 사용하면 1을 컬럼 번호로 취급
   Sepal.Length
1:          5.1

> iris[1, c("Sepal.Length")]
[1] 5.1

> DT[1, c("Sepal.Length")]  # c("Sepal.Length")가 연산식으로 취급되어 그 값이 그대로 반환됨
[1] "Sepal.Length"

> DT[1, c("Sepal.Length"), with=FALSE]  # with=FALSE를 사용하면 컬럼 이름으로 취급
   Sepal.Length
1:          5.1

데이터 테이블의 세 번째 인자에는 데이터를 그룹 지을 변수를 지정한다. 예를 들어, Sepal.Length의 평균값을 Species별로 구하는 계산은 세 번째 인자로 by=“Species”를 지정해 수행할 수 있다.

> DT[, mean(Sepal.Length), by="Species"]
      Species    V1
1:     setosa 5.006
2: versicolor 5.936
3:  virginica 6.588

만약 그룹을 지을 때 사용할 변수가 여러 개라면 by에 컬럼명을 계속 나열하면 된다. 다음은 값을 저장한 x, 데이터의 분류를 저장한 y, z를 가진 데이터 테이블에서 x의 평균을 y, z 두 값에 따라 계산한 예다.

> DT <- data.table(x=c(1, 2, 3, 4, 5),
+                  y=c("a", "a", "a", "b", "b"),
+                  z=c("c", "c", "d", "d", "d"))

> DT
   x y z
1: 1 a c
2: 2 a c
3: 3 a d
4: 4 b d
5: 5 b d

> DT[, mean(x), by="y,z"]
   y z  V1
1: a c 1.5
2: a d 3.0
3: b d 4.5

이처럼 연산을 손쉽게 표현할 수 있다는 점이 데이터 테이블의 장점이다.

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