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