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

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

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