행렬
Matrix( ) 함수
> mat1 <- matrix(c(1,2,3,4)) //기본적으로 열로 생성, 데이터형이 동일해야 함
> mat1
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
> mat2 <- matrix(c(1,2,3,4, 5, 6, 7, 8),nrow=2) //2열
> mat2
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
> mat3 <- matrix(c(1,2,3,4),nrow=2,byrow=T) //2열
> mat3
[,1] [,2]
[1,] 1 2
[2,] 3 4
> mat3[ ,1] //모든 행의 1 열 값을 출력
[1] 1 3
> mat3[1,] //1행의 모든 열 값을 출력
[1] 1 2
> mat3[1,1] //1행 1열의 값을 출력
[1] 1
새로운 행과 열 추가하기 - rbind( ) , cbind( ) 사용
> mat4 <- matrix(c(1,2,3
+ ,4,5,6
+ ,7,8,9),nrow=3,byrow=T)
> mat4
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
rbind( ) 로 행 추가
> mat4 <- rbind(mat4,c(11,12,13)) //마지막 행이 추가
> mat4
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 11 12 13
> mat4 <- rbind(mat4,c(15,16,17,18)) <-- 길이가 다를 경우 아래처럼 에러
경고메시지:
In rbind(mat4, c(15, 16, 17, 18)) :
number of columns of result is not a multiple of vector length (arg 2)
> mat5 <- matrix(c('a','b','c','d'),nrow=2,byrow=T)
> mat5
[,1] [,2]
[1,] "a" "b"
[2,] "c" "d"
cbind( ) 로 열 추가
> mat5 <- cbind(mat5,c('e','f'))
> mat5
[,1] [,2] [,3]
[1,] "a" "b" "e"
[2,] "c" "d" "f"
컬럼 이름 지정하기
> colnames(mat5) <- c('First','Second','Third')
> mat5
First Second Third
[1,] "a" "b" "e"
[2,] "c" "d" "f"
Array(배열)
> array1 <- array(c(1:12), dim=c(4,3)) // matrix처럼 2차원 배열, 1~12까지, 4행 3열로 출력
> array1
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> array2 <- array(c(1:12), dim=c(2,2,3)) //3차원 배열 생성
> array2
, , 1 //1 층
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2 // 2층
[,1] [,2]
[1,] 5 7
[2,] 6 8
, , 3 //3 층
[,1] [,2]
[1,] 9 11
[2,] 10 12
> array2[1,1,3] // x :1 , y : 1 ,z : 3 인 데이터를 조회
[1] 9
List
list생성하고 조회하기 (서로 다른 데이터 유형 저장 가능)
> list1 <- list(name='James Seo' ,
+ address='Seoul' ,
+ tel='010-8706-4712',
+ pay=500)
> list1
$name // Key 부분
[1] "James Seo" //Value 부분
$address
[1] "Seoul"
$tel
[1] "010-8706-4712"
$pay
[1] 500
특정 key 값만 조회하기
> list1$name
[1] "James Seo“
> list1[1:2]
$name
[1] "James Seo"
$address
[1] "Seoul"
List 에 새로운 요소 추가/삭제하기
> list1$birth <- '1975-10-23' //생일 추가
> list1
$name
[1] "James Seo"
$address
[1] "Seoul"
$tel
[1] "010-8706-4712"
$pay
[1] 500
$birth
[1] "1975-10-23"
하나의 key 에 두개의 value 동시에 넣기
> list1$name <- c('Seojinsu','James Seo')
> list1$name
[1] "Seojinsu" "James Seo"
특정 값 삭제하기
> list1$birth <- NULL
> list1
$name
[1] "Seojinsu" "James Seo"
$address
[1] "Seoul"
$tel
[1] "010-8706-4712"
$pay
[1] 500
데이터 프레임
벡터로부터 데이터 프레임 생성하기
> no <- c(1,2,3,4)
> name <- c('Apple','Peach','Banana','Grape')
> price <- c(500,200,100,50)
> qty <- c(5,2,4,7)
> sales <- data.frame(NO=no,NAME=name,PRICE=price,QTY=qty)
> sales
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
행렬로부터 데이터 프레임 생성하기
> sales2 <- matrix(c(1,'Apple',500,5,
+ 2,'Peach',200,2,
+ 3,'Banana',100,4,
+ 4,'Grape',50,7),nrow=4,byrow=T)
> sales2
[,1] [,2] [,3] [,4]
[1,] "1" "Apple" "500" "5"
[2,] "2" "Peach" "200" "2"
[3,] "3" "Banana" "100" "4"
[4,] "4" "Grape" "50" "7"
> df1 <- data.frame(sales2) //데이터프레임으로 변환
> df1
X1 X2 X3 X4
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
> names(df1) <- c('NO','NAME','PRICE','QTY') //라벨명 지정
> df1
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
데이터 프레임에서 원하는 데이터만 조회하기
> sales
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
> sales$NAME //NAME 열만 출력
[1] Apple Peach Banana Grape
Levels: Apple Banana Grape Peach
> sales[1,3] //1행 3열 출력
[1] 500
> sales[1,] //1행 출력
NO NAME PRICE QTY
1 1 Apple 500 5
> sales[,3] //3열만 출력
[1] 500 200 100 50
> sales[c(1,2),] //1~2행 출력, 행과 열은 ',' (콤마)위치로 구분, ')' (닫는 괄호)뒤에 ',' (콤마)
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
> sales[,c(1,2)] //1~2행 출력, c 앞쪽에 ',' (콤마)
NO NAME
1 1 Apple
2 2 Peach
3 3 Banana
4 4 Grape
> sales[,c(1:3)] //1~3행 출력
NO NAME PRICE
1 1 Apple 500
2 2 Peach 200
3 3 Banana 100
4 4 Grape 50
subset( ) 으로 원하는 조건만 조회
> sales
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
> subset(sales,qty<5)
NO NAME PRICE QTY
2 2 Peach 200 2
3 3 Banana 100 4
> subset(sales,price==200)
NO NAME PRICE QTY
2 2 Peach 200 2
> subset(sales,name=='Apple') //조건이 문자일 경우 반드시 '홑따옴표'나 "쌍따옴표" 처리
> subset(sales,name=='Apple')
NO NAME PRICE QTY
1 1 Apple 500 5
데이터 프레임 합치기 - rbind( ) , cbind( ) , merge( )사용하기
> no <- c(1,2,3)
> name <- c('apple','banana','peach')
> price <- c(100,200,300)
> df1 <- data.frame(NO=no,NAME=name,PRICE=price)
> df1
NO NAME PRICE
1 1 apple 100
2 2 banana 200
3 3 peach 300
> no <- c(10,20,30)
> name <- c('train','car','airplane')
> price <- c(1000,2000,3000)
> df2 <- data.frame(NO=no,NAME=name,PRICE=price)
> df2
NO NAME PRICE
1 10 train 1000
2 20 car 2000
3 30 airplane 3000
> df3 <- cbind(df1,df2) //옆으로 붙이기
> df3
NO NAME PRICE NO NAME PRICE
1 1 apple 100 10 train 1000
2 2 banana 200 20 car 2000
3 3 peach 300 30 airplane 3000
> df4 <- rbind(df1,df2) //아래로 붙이기
> df4
NO NAME PRICE
1 1 apple 100
2 2 banana 200
3 3 peach 300
4 10 train 1000
5 20 car 2000
6 30 airplane 3000
> df1 <- data.frame(name=c('apple','banana','cherry'), //값 변경하기
+ price=c(300,200,100))
> df2 <- data.frame(name=c('apple','cherry','berry'),
+ qty=c(10,20,30))
> df1
name price
1 apple 300
2 banana 200
3 cherry 100
> df2
name qty
1 apple 10
2 cherry 20
3 berry 30
> merge(df1,df2) // df1기준으로 df2와 공통으로 있는 name 컬럼 데이터를 출력함
name price qty
1 apple 300 10
2 cherry 100 20
> merge(df1,df2,all=T) //데이터가 없는 것도 모두 나오게 all=T 옵션 지정
name price qty
1 apple 300 10
2 banana 200 NA // df2 에 banana 가 없어서 NA 로 출력
3 cherry 100 20
4 berry NA 30 // df1 에 berry 가 없어서 NA 로 출력
> cbind(df1,df2) // df1 과 df2 를 합쳐서 하나의 데이터프레임으로 만듦
name price name qty
1 apple 300 apple 10
2 banana 200 cherry 20
3 cherry 100 berry 30
> cbind(df2,df1)
name qty name price
1 apple 10 apple 300
2 cherry 20 banana 200
3 berry 30 cherry 100
데이터 프레임에 행과 열 추가하기
> df1
name price
1 apple 300
2 banana 200
3 cherry 100
> new <- data.frame(name="mango",price=400) // 추가할 내용을 생성
> df1 <- rbind(df1,new) // rbind로 행을 추가
> df1
name price
1 apple 300
2 banana 200
3 cherry 100
4 mango 400
> df1 <- rbind(df1,data.frame(name="berry",price=500)) // 이렇게도 가능
> df1
name price
1 apple 300
2 banana 200
3 cherry 100
4 mango 400
5 berry 500
> df1 <- cbind(df1,data.frame(qty=c(10,20,30,40,50))) // 열 추가하기
> df1
name price qty
1 apple 300 10
2 banana 200 20
3 cherry 100 30
4 mango 400 40
5 berry 500 50
데이터 프레임에서 특정 컬럼들만 골라내서 새로운 형태 만들기
> no <- c(1,2,3,4,5)
> name <- c("서진수","주시현","최경우","이동근","윤정웅")
> address <- c("서울","대전","포항","경주","경기")
> tel <- c(1111,2222,3333,4444,5555)
> hobby <- c("독서","미술","놀고먹기","먹고놀기","노는애감시하기")
> member <- data.frame(NO=no,NAME=name,
+ ADDRESS=address,TEL=tel,HOBBY=hobby)
> member
NO NAME ADDRESS TEL HOBBY
1 1 서진수 서울 1111 독서
2 2 주시현 대전 2222 미술
3 3 최경우 포항 3333 놀고먹기
4 4 이동근 경주 4444 먹고놀기
5 5 윤정웅 경기 5555 노는애감시하기
> member2 <- subset(member,select=c(NO,NAME,TEL)) //특정 컬럼만 지정
> member2
NO NAME TEL
1 1 서진수 1111
2 2 주시현 2222
3 3 최경우 3333
4 4 이동근 4444
5 5 윤정웅 5555
> member3 <- subset(member,select= -TEL) //특정 컬럼만 제외하기
> member3
NO NAME ADDRESS HOBBY
1 1 서진수 서울 독서
2 2 주시현 대전 미술
3 3 최경우 포항 놀고먹기
4 4 이동근 경주 먹고놀기
5 5 윤정웅 경기 노는애감시하기
> colnames(member3) <- c("번호","이름","주소","취미") // 열 이름 변경하기
> member3
번호 이름 주소 취미
1 1 서진수 서울 독서
2 2 주시현 대전 미술
3 3 최경우 포항 놀고먹기
4 4 이동근 경주 먹고놀기
5 5 윤정웅 경기 노는애감시하기
데이터 프레임의 내용 확인 및 출력 순서 지정하기
> sales
NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7
> ncol(sales) //data frame 열의 개수
[1] 4
> nrow(sales) //data frame 행의 개수
[1] 4
> names(sales) //data frame 열 이름 출력
[1] "NO" "NAME" "PRICE" "QTY"
> rownames(sales) //data frame 행 이름 출력
[1] "1" "2" "3" "4"
> sales[c(2,3,1),] // 행의 출력 순서 조정 (열도 조정 가능)
NO NAME PRICE QTY
2 2 Peach 200 2
3 3 Banana 100 4
1 1 Apple 500 5
출처
더알음 네이버카페 : http://cafe.naver.com/theareum
R라뷰 개정판 실습데이터 모음 : https://www.dropbox.com/s/16ytsq4q3rdaro4/%EB%8D%94%EB%A7%8E%EC%9D%B4_R%EB%9D%BC%EB%B7%B0_%EA%B0%9C%EC%A0%95%ED%8C%90%EC%9A%A9_%EC%8B%A4%EC%8A%B5%EC%9A%A9_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%AA%A8%EC%9D%8C.zip?dl=0