데이터 프레임 접근
표 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