더북(TheBook)

데이터 프레임 접근

표 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.