더북(TheBook)

만약 이미 정의된 데이터 프레임에서 컬럼 이름 colname에 데이터 y를 저장하고자 한다면 d$colname <- y 문법을 사용한다. 다음은 x 컬럼의 값을 1, 2, 3, 4, 5에서 6, 7, 8, 9, 10으로 바꾸는 예다.

> d <- data.frame(x=c(1, 2, 3, 4, 5),
+                  y=c(2, 4, 6, 8, 10),
+                  z=c('M', 'F', 'M', 'F', 'M'))
> d$x
[1] 1 2 3 4 5
> d$x <- 6:10
> d
   x  y  z
1  6  2  M
2  7  4  F
3  8  6  M
4  9  8  F
5 10 10  M

위의 데이터 프레임 d에 기존에 없던 컬럼 w를 추가하고자 할 때도 같은 문법을 사용한다.

> d$w <- c("A", "B", "C", "D", "E")
> d
   x  y  z  w
1  6  2  M  A
2  7  4  F  B
3  8  6  M  C
4  9  8  F  D
5 10 10  M  E

한 가지 특이할 만한 점은 w 컬럼에 저장한 데이터가 벡터므로 d$w의 데이터 타입 역시 chr(문자열 벡터)이라는 점이다. 이는 data.frame( )에 문자열 벡터를 지정할 때 stringsAsFactor를 지정하지 않으면 문자열이 팩터로 바뀌는 것과는 다른 점이다.

> str(d)
'data.frame': 5 obs. of 4 variables:
$ x: int 6 7 8 9 10
$ y: num 2 4 6 8 10
$ z: Factor w/ 2 levels "F","M": 2 1 2 1 2
$ w: chr "A" "B" "C" "D" ...

데이터 프레임의 행 이름, 컬럼 이름은 각각 rownames( ), colnames( ) 함수로 지정할 수 있다.

> (x <- data.frame(1:3))
  X1.3
1    1
2    2
3    3
> colnames(x) <- c('val')
> x
  val
1 1
2 2
3 3
> rownames(x) <- c('a', 'b', 'c')
> x
  val
a 1
b 2
c 3

또는 names( )를 사용해도 colnames( )와 같은 결과를 얻는다.

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