행렬은 차원으로 표시되며 같은 형태의 객체를 가지는 반면, 데이터 프레임은 각 열들이 서로 다른 형태의 객체를 가질 수 있음.
데이터 프레임을 생성하기 위한 방법 - read.table()함수를 이용하여 외부 텍스트 파일을 불러들인다 - data.frame()함수를 이용하여 여러 종류의 자료객체들을 서로 결합 - as.data.frame()함수를 사용하여 다른 형태의 자료객체를 데이터 프레임의 형태로 변환
read.table함수를 이용하여 데이터 프레임 생성하기
d2 <- read.table("D://KNOU//3학년2학기//R컴퓨팅//story.txt", row.names = 'num', header=T)
d2
## name age sex
## 1 Jeff 55 M
## 2 Park 47 F
## 3 So 35 M
## 4 Kim 26 F
## 5 Yoon 29 M
문자형 벡터 char1 과 수치형 벡터 num1을 생성하고 결합하여 test1이라는 데이터 프레임을 만들어보자
char1 <- LETTERS[1:26]
num1 <- 1:26
test1 <- data.frame(char1, num1)
test1
## char1 num1
## 1 A 1
## 2 B 2
## 3 C 3
## 4 D 4
## 5 E 5
## 6 F 6
## 7 G 7
## 8 H 8
## 9 I 9
## 10 J 10
## 11 K 11
## 12 L 12
## 13 M 13
## 14 N 14
## 15 O 15
## 16 P 16
## 17 Q 17
## 18 R 18
## 19 S 19
## 20 T 20
## 21 U 21
## 22 V 22
## 23 W 23
## 24 X 24
## 25 Y 25
## 26 Z 26
문자a부터 o까지로 이루어진 벡터를 생성하고 이를 5행 3열의 행렬로 변환한뒤 a1으로 저장하고 데이터 프레임으로 변환
a1 <- letters[1:15]
dim(a1) <- c(5,3)
a1
## [,1] [,2] [,3]
## [1,] "a" "f" "k"
## [2,] "b" "g" "l"
## [3,] "c" "h" "m"
## [4,] "d" "i" "n"
## [5,] "e" "j" "o"
데이터 프레임의 결합 서로 다른 데이터 프레임을 생성하였다면 데이터 프레임을 합하여 하나의 데이터 프레임으로 생성할 수 있음
데이터 프레임을 합치는 방법에는 아래의 합수를 사용 - rbind() - cbind() - merge()
test1과 test2라는 데이터 프레임을 cbind()함수를 이용하여 test3라는 데이터 프레임을 만들어 옆으로 합치기 test3라는 새로운 데이터 프레임을 생성하여 rbind 함수를 이용하여 test1과 test3 아래로 합치기
test1 <- LETTERS[1:25]
dim(test1) <- c(5,5)
test2 <- letters[1:25]
dim(test2) <- c(5,5)
test3 <- cbind(test1,test2)
test3
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] "A" "F" "K" "P" "U" "a" "f" "k" "p" "u"
## [2,] "B" "G" "L" "Q" "V" "b" "g" "l" "q" "v"
## [3,] "C" "H" "M" "R" "W" "c" "h" "m" "r" "w"
## [4,] "D" "I" "N" "S" "X" "d" "i" "n" "s" "x"
## [5,] "E" "J" "O" "T" "Y" "e" "j" "o" "t" "y"
test4 <- 1:20
dim(test4) <- c(2,10)
test4
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 3 5 7 9 11 13 15 17 19
## [2,] 2 4 6 8 10 12 14 16 18 20
rbind(test3,test4)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] "A" "F" "K" "P" "U" "a" "f" "k" "p" "u"
## [2,] "B" "G" "L" "Q" "V" "b" "g" "l" "q" "v"
## [3,] "C" "H" "M" "R" "W" "c" "h" "m" "r" "w"
## [4,] "D" "I" "N" "S" "X" "d" "i" "n" "s" "x"
## [5,] "E" "J" "O" "T" "Y" "e" "j" "o" "t" "y"
## [6,] "1" "3" "5" "7" "9" "11" "13" "15" "17" "19"
## [7,] "2" "4" "6" "8" "10" "12" "14" "16" "18" "20"
merge함수를 사용하면 같은 변수에 대해서 한번만 출력 test3와 test4를 병합할경우 처음의 변수에 대해서 알파벳 순서로 정렬이 되고 나머지 변수들이 옆으로 합쳐짐
a <- 1:5
b <- rep(c('A','B','C'), c(2,2,1))
c <- rep(c(1,2,3),c(2,2,1))
d <- rep(c('A','B','C'),c(1,2,2))
e <- rep(c(1,2,3),c(1,1,3))
test1 <- data.frame(a,b,c)
test4 <- data.frame(a,d,e)
merge(test1,test4)
## a b c d e
## 1 1 A 1 A 1
## 2 2 A 1 B 2
## 3 3 B 2 B 3
## 4 4 B 2 C 3
## 5 5 C 3 C 3
colnames(test1) <- c('seq','val_n','val_c')
colnames(test4) <- c('seq','val_n','val_c')
merge(test1,test4)
## seq val_n val_c
## 1 1 A 1
## 2 5 C 3