1.8 데이터 프레임(Data Frames)

데이터 프레임은 데이터 세트 테이블을 저장하는데 사용되는 특별한 종류의 리스트이다. 각 행은 데이터의 사례를 각 열은 변수로 생각하면 된다. 각 열은 벡터 또는 factor이다.

데이터 프레임의 생성 :

dfr1 <- data.frame( ID=1:4,
                    FirstName=c("John","Jim","Jane","Jill"),
                    Female=c(F,F,T,T), 
                    Age=c(22,33,44,55) )
str(dfr1)
## 'data.frame':    4 obs. of  4 variables:
##  $ ID       : int  1 2 3 4
##  $ FirstName: chr  "John" "Jim" "Jane" "Jill"
##  $ Female   : logi  FALSE FALSE TRUE TRUE
##  $ Age      : num  22 33 44 55
dfr1$FirstName       # dfr1의 두 번째 컬럼 접근
## [1] "John" "Jim"  "Jane" "Jill"

여기서, R(R 4.0 이전 버전)은 dfr1$FirstName 은 범주형 변수라고 생각하고, 문자 벡터가 아닌 factor 처럼 처리할 것이라는 점을 주목하라. as.vector() 함수를 이용하여 R에게 FirstName을 factor가 아닌 벡터로 처리하게 하자 :

dfr1$FirstName <- as.vector(dfr1$FirstName)   # as.factor() : factor로 변환

다른 방법으로, stringsAsFactors=FALSE를 사용하여 처음부터 factor로 처리하지 않도록 할 수 있다. (R 4.0 이후에는 기본적으로 이렇게 설정되어 있다.)

dfr2 <- data.frame(FirstName=c("John","Jim","Jane","Jill"), 
                   stringsAsFactors=F)

dfr2$FirstName       # Factor가 아님 : 성공
## [1] "John" "Jim"  "Jane" "Jill"

데이터 프레임의 요소 접근 :

# 행/열 접근
dfr1[1,]             # 첫 번째 행, 모든 열
##   ID FirstName Female Age
## 1  1      John  FALSE  22
dfr1[,1]             # 첫 번째 열, 모든 행
## [1] 1 2 3 4
# Age 이름의 열 접근
dfr1$Age             # Age 열, 모든 행
## [1] 22 33 44 55
dfr1[1:2,3:4]        # 1행, 2행 그리고 3열과 4열 - "john"과 "jim"의 "gender"와 "age"
##   Female Age
## 1  FALSE  22
## 2  FALSE  33
dfr1[c(1,3),]        # 1행과 3행 그리고 모든 열
##   ID FirstName Female Age
## 1  1      John  FALSE  22
## 3  3      Jane   TRUE  44

데이터에서 30세 이상인 사람들의 이름(FirstName) 확인 :

dfr1[dfr1$Age>30, 2]
## [1] "Jim"  "Jane" "Jill"

데이터에서 모든 여성(Female == TRUE)평균 나이(mean(Age)) 확인 :

females <- dfr1$Female==TRUE
ages_of_females <- dfr1[females, 4]
mean (ages_of_females)
## [1] 49.5