행렬은 차원으로 표시되며 같은 형태의 객체를 가지는 반면, 데이터 프레임은 각 열들이 서로 다른 형태의 객체를 가질 수 있음.

  1. 데이터 프레임은 형태(mode)가 일반화된 행혈
  2. 데이터 프레임이라는 하나의 객체에 여러 종류의 자료가 들어갈 수 있음
  3. 데이터 프레임의 각 열은 각각 변수와 대응
  4. 분석이나 모형 설정에 적합한 자료 객체

데이터 프레임을 생성하기 위한 방법 - 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