데이터 프레임 사용하기
데이터 프레임이란 배열과 비슷하지만 차이점은 각 컬럼별로 데이터 형태가 다를 수 있다는 점입니다.
즉 RDBMS 에서 테이블과 비슷한 형태라고 생각하면 됩니다.
일반 DBMS 에서는 컬럼이라고 부르는 것을 R 에서는 라벨이라고 부릅니다.
일반 DB에서 컬럼을 통해 데이터 접근이 가능하듯이 R 에서도 라벨을 이용해서 데이터 제어가 가능합니다.
No Name Price Qty
1 Apple 500 5
2 Banana 200 2
3 Peach 200 7
4 Berry 50 9
위와 같은 형태를 R 에서는 데이터 프레임이라고 하며 직접 R 에서 만들 수도 있고 외부 파일에서 읽어와서 데이터를 생성할 수도 있습니다.
1. R 에서 데이터 프레임 생성하기
1) 벡터로 부터 데이터 프레임 생성하기
> no <- c(1,2,3,4)
> name <- c("Apple", "Banana", "Peach", "Berry")
> price <- c(500,200,200,50)
> qty <- c(5,2,7,9)
> fruits <- data.frame (NO=no, NAME=name, PRICE=price, QTY=qty)
> fruits
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Banana 200 2
3 3 Peach 200 7
4 4 Berry 50 9
>
위 그림을 주의깊게 보면 각 컬럼(라벨)별로 먼저 생성 한 후 data.frame 라는 명령으로 모든 컬럼(라벨)을 합쳐서 데이터 프레임을 생성함을 알 수 있습니다.
> x <-matrix(
+ c(1,"이순신",180,80,
+ 2,"일지매",175,75,
+ 3,"홍길동",170,70,
+ 4,"유관순",165,55),4,by=T)
> people <- data.frame(x)
> people
X1 X2 X3 X4
1 1 이순신 180 80
2 2 일지매 175 75
3 3 홍길동 170 70
4 4 유관순 165 55
> names(people) <- c("NO","NAME","HEIGHT","WEIGHT")
> people
NO NAME HEIGHT WEIGHT
1 1 이순신 180 80
2 2 일지매 175 75
3 3 홍길동 170 70
4 4 유관순 165 55
# 으로 주석이 되어있다면 해당 라인은 저장하지 않습니다.
> fruit2 <- read.table("d:/yul/temp/fruit.txt,sep="",skip=3)
skip 은 첫줄부터 건너뛸 줄 수를 선택하는 옵션입니다.
> fruit2 <- read.table("d:/yul/temp/fruit.txt,sep="",nrows=3)
nrows 는 skip 과 반대로 출력할 줄 수를 지정합니다.
csv 처럼 구분자가 ,(콤마) 인 경우는 read.csv 를 사용하는 방법이 간편합니다.
> fruit3 <- read.csv("d:/yul/temp/fruit3.csv")
만약 소스 파일에 컬럼명이 없다면 수동으로 지정해주어야 합니다.
> fruit4 <- read.csv("d:/yul/temp/fruit4.csv", header=F)
> lname <- c("NO", "NAME", "PRICE", "QTY")
> fruit4 <- read.csv("d:/yul/temp/fruit4.csv",header=F,col.names=lname)
> fruit4
NO NAME PRICE QTY
1 1 apple 500 5
2 2 banana 200 2
3 3 peach 200 7
4 4 berry 50 9
위의 방법으로 csv 파일을 R 로 불러들여서 데이터 프레임을 생성할 수 있으며
만약 tab 으로 구분된 파일이라면 read.delim( ) 함수를 이용하여 동일한 방법으로 파일을 호출하면 됩니다.
2) xls (Microsoft Office Excel) 파일로 부터 데이터 프레임 생성하기
이 기능은 R 에 기본적으로는 없으며 이 기능을 지원하는 패키지를 추가로 설치해야 합니다.
만약 R 이 32bit 용 이라면 RODBC 를 아래와 같이 설치하면 되고 64bit 용 R 일 경우 XLConnect 라는 패키지를 설치해야 합니다.
32bit 용 RODBC 설치 화면
> install.packages("RODBC")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---
trying URL 'http://cran.nexr.com/bin/windows/contrib/3.0/RODBC_1.3-10.zip'
Content type 'application/zip' length 829130 bytes (809 Kb)
opened URL
downloaded 809 Kb
package ‘RODBC’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\stu\AppData\Local\Temp\Rtmp0oVA5L\downloaded_packages
> install.packages("XLConnect")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.nexr.com/bin/windows/contrib/3.0/XLConnect_0.2-7.zip'
Content type 'application/zip' length 17998766 bytes (17.2 Mb)
opened URL
downloaded 17.2 Mb
package ‘XLConnect’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\stu\AppData\Local\Temp\Rtmp0oVA5L\downloaded_packages
> library(XLConnect)
XLConnect 0.2-7 by Mirai Solutions GmbH
http://www.mirai-solutions.com ,
http://miraisolutions.wordpress.com
테스트를 위해 아래와 같은 xls 파일을 생성한 후 저장합니다.
> setwd("d:/yul/temp")
> require(XLConnect)
> ex1=loadWorkbook("fruits.xls",create=T)
> exdata=readWorksheet(ex1,sheet="sheet1",startRow=1,endRow=10,startCol=1,endCol=10)
> exdata
Col1 Col2 Col3 Col4
1 no name price qty
2 1 apple 500 5
3 2 banana 200 2
4 3 peach 200 7
5 4 berry 50 9
> exdata=readWorksheet(ex1,sheet="sheet1",startRow=1,endRow=10,startCol=2,endCol=3)
컬럼이나 로우를 얼마든지 원하는 대로 선택해서 조회할 수 있습니다.
3) 클립보드의 내용을 사용해서 데이터 프레임 생성하기
먼저 윈도에서 엑셀 창에서 원하는 부분을 선택 한 후 Ctrl+c 로 복사를 합니다.
그 후에 R 에 와서 아래와 같이 수행하면 복사 내용이 입력이 됩니다.
> fruits7 <- read.delim("clipboard",header=T)
> fruits7
no name price qty
1 1 apple 500 5
2 2 banana 200 2
3 3 peach 200 7
4 4 berry 50 9
3. 데이터 프레임 안의 내용을 집계하기
> fruits7
no name price qty
1 1 apple 500 5
2 2 banana 200 2
3 3 peach 200 7
4 4 berry 50 9
> summary(fruits7)
no name price qty
Min. :1.00 apple :1 Min. : 50.0 Min. :2.00
1st Qu.:1.75 banana:1 1st Qu.:162.5 1st Qu.:4.25
Median :2.50 berry :1 Median :200.0 Median :6.00
Mean :2.50 peach :1 Mean :237.5 Mean :5.75
3rd Qu.:3.25 3rd Qu.:275.0 3rd Qu.:7.50
Max. :4.00 Max. :500.0 Max. :9.00
4. 데이터 프레임 저장하기
> fruits7
no name price qty
1 1 apple 500 5
2 2 banana 200 2
3 3 peach 200 7
4 4 berry 50 9
> write.table(fruits7,"d:/yul/temp/fruits7.txt",quote=F,append=F)
>