SW/R

R : 데이터 프레임(data frame) 개념 및 예제

얇은생각 2019. 2. 3. 12:30
반응형

data frame 만들기

dataframe1


data frame을 만드는 방법은 다음과 같습니다. 일단 city라고 하는 vector가 있습니다. 그 다음에 rank라고 하는 vector가 있습니다. 2개 이상 여러 개의 vector를 data.fame이라고 하는 것으로 이렇게 묶으면 됩니다. 이렇게 묶으면 c.info라고 보이는 것과 같은 data fame이 만들어지는데, 아시다시피 city는 지금 문자열 형태로 되어 있고 rank는 숫자형입니다. 문자형 column과 숫자형 column이 같이 묶어진 이런 형태의 data fame을 만들게 되는데, data fame도 마찬가지로 만들어서 우리가 분석하는 경우는 잘 없습니다. 대체로는 다 이미 파일로 저장되어 있는 데이터를 쭉 불러오면 R이 알아서 문자 column과 숫자 column이 섞여 있으면 이것을 data fame으로 만들어줍니다. 만드는 수고를 실제로 할 일은 잘 없지만, 문법은 배워야 합니다.



iris : R 에서 제공하는 dataset

dataframe2


좀 그럴듯한 데이터를 가지고 연습을 하는 것이 좋습니다. 그래서 보통 데이터 분석을 공부하다 보면 흔하게 쓰이는 dataset이 하나 있는데, iris라고 하는 dataset 입니다. 이것은 우리가 만들어놓지는 않았는데 R을 설치하면 기본으로 연습하라고 주면 dataset들이 꽤 많이 있습니다. 그중의 하나가 iris인데 되게 유명한 dataset입니다. iris는 어떤 꽃입니다. 오른쪽에 꽃 그림이 보입니다. 이것이 우리말로는 붓꽃이라 합니다. 이것이 품종이 3개가 있다고 알려져 있습니다. 그래서 이 iris 데이터는 이 품종 3개의 꽃들을 많이 심어놨습니다. 꽃 한 그루, 한 그루를 가지고서 이것이 수치를 잰 것입니다. 4개의 수치를 꽃 한 그루에서 뽑아내는데, 먼저 여기 Sepal.Length하고 Sepal.Width는 꽃받침, 꽃받침의 길이와 폭을 나타낸 것입니다. 그다음에 Petal.Length와 Width는 꽃잎, 꽃잎의 길이와 폭을 잰 것입니다. 

모두  150그루를 쟀습니다.  그래서 3개 품종의 50그루씩 해서 쟀으니까 품종이 3개니까 150이 됩니다.

그래서 이 데이터는 그와 같이 꽃잎과 꽃받침의 길이와 폭을 4개의 변수에 저장을 한 것입니다. 그다음에 마지막에 있는 Species는 품종입니다. 지금 조사한 이 꽃이 어떤 품종이었냐. 이것을 갖다가 맨 마지막 다섯 번째 변수에 저장했습니다. 그래서 3개의 품종이 있습니다. setosa, virginica, versicolor 그래서 3개의 품종이 있습니다. 이것이 data fame인데, 왜냐하면 앞의 4개의 변수는 숫자형으로 되어 있습니다. 그런데 마지막 다섯 번째 변수가 문자형으로 되어 있습니다. 그래서 이것이 data fame의 형태임을 알 수가 있습니다.



data.frame의 column 별 데이터를 뽑는 여러 방법

dataframe3


진짜로 data fame인지를 알아보려면 여러 가지 방법이 있지만 쉽게 is.data.fame, data fame이냐 이렇게 물어보는 것이 있습니다. 그래서 iris를 이렇게 놓으면 true 아니면 false 이렇게 나오는데, true라고 나옵니다. 그다음에 이것이 data fame인데 matrix처럼 쓰일 수 있다고 그랬습니다. 그래서 iris하고 콤마 하고서 변수명, Species 이렇게 해주면  품종이라고 했습니다. 품종만 이렇게 잘라서 어떤 품종이 있는지를 쭉 볼 수가 있습니다.


그런데 그다음에 iris 하고서 이번에는 콤마 없이 Species만 썼습니다. 그러면 위하고 아래하고 차이는 무엇일까요? 콤마가 있느냐, 없느냐입니다. 이렇게 잘라낸 것은 한 줄입니다. 그래서 이것이 vector가 됩니다.


그런데 data fame인 경우에 이렇게 콤마 없이 column 이름만 달랑 쓰는 경우가 있는데, 이러면

잘라서 이 세로 모양을 그대로 유지하게 됩니다. 그래서 세로 모양이 되었다는 얘기는 이것은 matrix가 아니라  data fame이라는 얘기입니다. 즉 150행 1열의 data fame이 됩니다. 그래서 두 번째 명령하고 세 번째 명령은 비슷한 것 같은데 결과가 다른 것입니다. 두 번째는 잘라서 vector를, 가로 방향의 vector를 만드는 것이고, 세 번째 명령은 잘라서 그대로 유지하기 때문에 data fame이 됩니다.


그다음에 data fame인 경우는 특이한 어떤 column의 값을 잘라서 갖고 오는데, 특이한 방식으로 쓸 수 있습니다. data fame 이름하고 $라고 하는 것을 씁니다. $ 쓰고 그다음에 column 이름, 변수 이름을 쓰면 vector가 됩니다. 그래서 이 지금 4개의 코드 중에서 두 번째와 네 번째는 결과가 같습니다. 이 data fame 이름 $, 그다음에 변수명, 이것은 matrix에는 잘 안 됩니다. 그래서 여러분이 matrix에서도 이런 식으로 쓰고 싶다면 matrix를 data fame으로 conversion하면 됩니다.


dataframe4

반응형