매트릭스 형태의 데이터 입력(from scratch)

여기서는 matrix와 data frame을 구분하지 않겠다. 그저 (m x n) 2차원 행렬 형렬, 즉 테이블 형태로 펼친 데이터를 키보드로 입력하는 방법을 논하는 것이다.  파일을 통한 입력 기법에 대해서는 다음 기회에...

말이 나온 김에 matrix와 data frame의 차이를 잠시 논하도록 하자. 매트릭스에서는 모든 데이터의 mode가 동일해야 한다. 즉 numeric, character, factor 등 한 가지 형태의 데이터만 수용할 수 있다. R에서 character란 다른 언어에서 이야기하는 string도 포함함을 잊지 말자. data frame에서는 각 컬럼이 다른 형태의 데이터를 가질 수 있다. 예를 들어 1번 컬럼은 이름(character), 2번 컬럼은 반(factor), 3번 컬럼은 국어 성적(numeric)과 같은 성적표가 대표적인 사례가 되겠다.

가장 간단한 사례를 들어 보겠다. 한 가지의 모드(numeric)로만 되어 있고, 행/열의 이름이 없는 경우이다. 데이터가 채워지는 방향은 column 방향이 기본임을 알아두자.

> data = matrix(1:6)
> data = matrix(1:6, byrow=T, nrow=2)

이번에는 다음을 실행해 보자. data(매트릭스)와 d.frame(데이터 프레임)을 화면에 출력해 보니 어떤 차이점이 느껴지는가?

> data
> d.data = data.frame(data)
> d.data

d.data의 경우 각 컬럼 벡터는 자동 생성된 변수명을 이용하여 d.data$X1, d.data$X2, d.data$X3와 같이 표현하여 접근할 수 있다. 두번째 컬럼에 접근하려면 d.data[,2], d.data[[2]], d.data$X2와 같은 다양한 방법을 쓰면 된다. 대신 d.data[2]는 컬럼 형태, 즉 세로로 값을 출력하니 주의하기 바란다.

다음으로 행/열에 이름을 붙여 보도록 하자. 다음의 방법이 유일한 것은 아니다.

> row = c("r1", "r2")
> col = c("c1", "c2", "c3")
> dimnames(d.data) = list(row, col)
> dinnames(d.data)
> d.data

이제 대략적인 감을 잡았을 것이다. 그러면 좀 더 실용적인 사례를 들어 보자.

> name = c("Kim", "Jeong", "Choi", "Park")
> subject1 = c(90, 100, 87, 70)
> subject2 = c(80, 100, 23, 33)
> scores = data.frame(name, subject1, subject2)

혹은 다음과 같이 길게 한 줄로 입력해도 scores 데이터 프레임의 형태와 값은 동일하다.

> scores = data.frame(name = c("Kim", "Jeong", "Choi", "Park"), subject1 = c(90, 100, 87, 70), subject2 = c(80, 100, 23, 33))

Comments