데이터 프레임 접근

    표 2-21에 데이터 프레임의 데이터에 접근하는 방법을 정리했다.

    표 2-21 데이터 프레임 접근 문법

    문법

    의미

    d$colname

    데이터 프레임 d의 컬럼 이름 colname에 저장된 데이터

    d[m, n, drop=TRUE]

    데이터 프레임 d의 m행 n 컬럼에 저장된 데이터.

    m과 n을 벡터로 지정하여 다수의 행과 컬럼을 동시에 가져올 수 있으며 m, n에는 색인뿐만 아니라 행 이름이나 컬럼 이름을 지정할 수 있다.

    만약 m, n 중 하나를 생략하면 모든 행 또는 컬럼의 데이터를 의미한다.

    d[, n]과 같이 행을 지정하지 않고 특정 컬럼만 가져올 경우 반환 값은 데이터 프레임이 아니라 해당 컬럼의 데이터 타입이 된다. 이러한 형 변환을 원하지 않으면 drop=FALSE를 지정하여 데이터 프레임을 반환하도록 할 수 있다.

    데이터 프레임의 각 컬럼은 d$colname과 같이 컬럼 이름으로 접근할 수 있으며, 행이나 컬럼의 색인을 사용해서도 데이터에 접근할 수 있다.

    > d <- data.frame(x=c(1, 2, 3, 4, 5), y=c(2, 4, 6, 8, 10))
      x y
    1 1 2
    2 2 4
    3 3 6
    4 4 8
    5 5 10
    > d$x
    [1] 1 2 3 4 5
    > d[1, ]
      x y
    1 1 2
    > d[1, 2]
    [1] 2
    

    벡터로 색인을 지정하거나 제외할 행 또는 컬럼을 -로 표시할 수 있다.

    > d[c(1, 3), 2]
    [1] 2 6
    > d[-1, -2]
    [1] 2 3 4 5
    

    또는 컬럼 이름을 지정할 수도 있다.

    > d[, c("x", "y")]
       x  y
    1  1  2
    2  2  4
    3  3  6
    4  4  8
    5  5 10
    > d[, c("x")]
    [1] 1 2 3 4 5
    

    위 코드에서 d[, c(“x”)]로 x 컬럼만 선택했을 때 데이터 프레임의 일반적인 표 형태 출력이 아니라 벡터처럼 결과가 출력된 것을 볼 수 있다. 이는 컬럼의 차원이 1이 되면 반환 값이 해당 컬럼의 데이터 타입을 따르기 때문이다. 이러한 형 변환을 원치 않는다면 다음과 같이 drop=FALSE 옵션을 지정한다.

    > d[, c("x"), drop=FALSE]
      x
    1 1
    2 2
    3 3
    4 4
    5 5
    

    주어진 값이 벡터에 존재하는지를 판별하는 %in% 연산자와 데이터 프레임의 컬럼 이름을 반환하는 names( )를 이용하면 특정 컬럼만 선택하는 작업을 좀 더 손쉽게 할 수 있다. 예를 들어, 다음 코드는 a, b, c 컬럼이 있는 데이터 프레임에서 b, c 컬럼만 선택하는 경우다.

    > (d <- data.frame(a=1:3, b=4:6, c=7:9))
      a b c
    1 1 4 7
    2 2 5 8
    3 3 6 9
    > d[, names(d) %in% c("b", "c")]
      b c
    1 4 7
    2 5 8
    3 6 9
    

    반대로 ! 연산자를 사용해 특정 컬럼들만 제외해서 데이터를 선택할 수도 있다.

    > d[, !names(d) %in% c("a")]
      b c
    1 4 7
    2 5 8
    3 6 9
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.