지금까지는 컬럼명을 그대로 코드에 작성했다. 만약 데이터 테이블에서 [ ]의 두 번째 인자로 컬럼명을 담은 문자열 또는 컬럼 번호를 지정하고자 한다면 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
이처럼 연산을 손쉽게 표현할 수 있다는 점이 데이터 테이블의 장점이다.