728x90
반응형

데이터 프레임(Data Frame)

지난 포스트에선 데이터프레임의 생성과 데이터프레임의 정보를 파악하는 법에 대하여 공부해보았다.

이번 포스트에선 데이터프레임에서 새로운 컬럼을 생성하는 방법과 데이터 프레임에 접근하는 법에 대해 공부해보도록 하자.

 

 

 

데이터 프레임 접근

  • 데이터 프레임은 색인과 행과 열의 이름을 통해서 접근할 수 있다.
  • df$colname
    : "데이터프레임$컬럼이름"을 이용하면 데이터프레임에서 원하는 데이터에 접근할 수 있다.
  • df[r, c, drop = TRUE]
    : 데이터프레임 df의 r행, c열의 컬럼에 저장된 데이터를 가지고 올 수 있다.
    r과 c를 벡터로 지정하여 다수의 행과 컬럼을 동시에 가져올 수 있으며, 색인과 행 이름, 열 이름을 지정할 수도 있다. r과 c중 하나만 입력하는 경우, 예를 들어 c 하나만 넣은 경우엔 해당 열에 대한 모든 행 데이터를 가지고 온다.
    • r과 c중 하나만 불러오는 경우, 해당하는 행과 열 데이터만 해당 컬럼의 데이터 타입으로 가지고 오는데, 이러한 형 변환을 원하지 않는 경우엔 drop = FALSE로 지정하면 된다.
  • 인덱싱 방법은 다음과 같다.
    • df$col1
      : 데이터 프레임 df에서 col1 컬럼을 가지고 온다.
    • df[1,]
      : 데이터 프레임 df에서 1번째 행을 가지고 온다.
    • df[c(1,3), 2]
      : 데이터 프레임 df에서 1, 3번째 행을 가지고 오고, 2번째 컬럼을 가지고 온다.
    • df[ , c(2:5)]
      : 데이터 프레임 df에서 2~5번까지 컬럼을 가지고 온다.
    • df[ , -c(2:5)] == df[ , c(-2:-5)]
      : 데이터 프레임 df에서 2~5번 컬럼을 제외하고 가지고 온다.
    • df[ , c("math", "science")]
      : 데이터 프레임 df에서 math와 science 컬럼만 가지고 온다.
  • 위 인덱싱 방법말고도 다른 함수들을 조합해서 가지고 올 수는 있으나, 위 방법만으로도 충분하다.
  • 위 인덱싱 방법들을 응용하여, 내가 가지고 오고 싶은 데이터만 가지고 와보자.
# 데이터 프레임에서 내가 원하는 값만 가지고 와보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택", "윤기" ,"재빈", "현희", "미선", "선화")
vt2 = c(70, 60, 50, 80, 90, 80, 65, 75, 90, 80)
vt3 = c(80, 70, 85, 65, 55, 70, 75, 80, 65, 75)
vt4 = c(75, 80, 90, 75, 85, 75, 80, 85, 80, 85)

exam = data.frame("name" = vt1, "math" = vt2, "english" = vt3, "science" = vt4)
# exam에서 math컬럼만 가지고 오자.
exam$math
##  [1] 70 60 50 80 90 80 65 75 90 80
  • indexing을 하는 경우, 데이터 타입이 바뀔 수 있으므로 주의해야한다.
# exam에서 1번째 행만 가지고 오자.
exam[1,]
##   name math english science
## 1 민철   70      80      75
# exam에서 1, 3행과 2번 컬럼만 가지고 오자.
exam[c(1,3),  2]
## [1] 70 50
# exam에서 2, 3, 4 행과 name, math 컬럼만 가지고 오자.
exam[c(2, 3, 4), c("name", "math")]
##   name math
## 2 재성   60
## 3 기훈   50
## 4 현승   80
# exam에서 3번째 컬럼만 제외하고 가지고 오자.
exam[, -c(3)]
##    name math science
## 1  민철   70      75
## 2  재성   60      80
## 3  기훈   50      90
## 4  현승   80      75
## 5  현택   90      85
## 6  윤기   80      75
## 7  재빈   65      80
## 8  현희   75      85
## 9  미선   90      80
## 10 선화   80      85

 

 

 

 

새로운 컬럼 추가

  • 데이터 프레임에 새로운 컬럼(변수)를 추가하는 방법은 R 자체의 Base 함수를 쓰거나, dplyr과 같은 데이터 핸들링 패키지를 쓰는 방법 등이 있다.
  • 이번 포스트에선 R의 Base 함수를 이용해서 새로운 컬럼을 추가해보자.
  • 데이터 프레임은 indexing 방법이었던, "$변수이름"에 새로운 벡터를 추가하여 컬럼을 추가할 수 있다.
# 컬럼을 추가해보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택", "윤기" ,"재빈", "현희", "미선", "선화")
vt2 = c(70, 60, 50, 80, 90, 80, 65, 75, 90, 80)
vt3 = c(80, 70, 85, 65, 55, 70, 75, 80, 65, 75)
vt4 = c(75, 80, 90, 75, 85, 75, 80, 85, 80, 85)

exam = data.frame("name" = vt1, "math" = vt2, "english" = vt3, "science" = vt4)
# Korean 이라는 과목을 추가해보자
exam$Korean <- c(70, 85, 90, 80, 65, 75, 80, 75, 85, 70)
head(exam)
##   name math english science Korean
## 1 민철   70      80      75     70
## 2 재성   60      70      80     85
## 3 기훈   50      85      90     90
## 4 현승   80      65      75     80
## 5 현택   90      55      85     65
## 6 윤기   80      70      75     75
# 총점을 추가해보자.
exam$total <- exam$math + exam$english + exam$science + exam$Korean
head(exam)
##   name math english science Korean total
## 1 민철   70      80      75     70   295
## 2 재성   60      70      80     85   295
## 3 기훈   50      85      90     90   315
## 4 현승   80      65      75     80   300
## 5 현택   90      55      85     65   295
## 6 윤기   80      70      75     75   300
# 평균점수를 구해보자.
exam$mean <- exam$total/4
head(exam)
##   name math english science Korean total mean
## 1 민철   70      80      75     70   295 73.75
## 2 재성   60      70      80     85   295 73.75
## 3 기훈   50      85      90     90   315 78.75
## 4 현승   80      65      75     80   300 75.00
## 5 현택   90      55      85     65   295 73.75
## 6 윤기   80      70      75     75   300 75.00

 

 

 

지금까지 데이터프레임에 대한 아주 기초적인 학습을 해보았다.

데이터프레임은 지금까지 다룬 내용으로만 끝내기엔, 활용처가 매우 많기 때문에, 다음 포스트인 list형에 대해 학습을 마치고 데이터 핸들링으로 가장 유명한 패키지인 dplyr에 대해 공부를 하면서, 보다 심도 깊게 다뤄보도록 하겠다.

728x90
반응형

'R > Basic' 카테고리의 다른 글

R(기초) 데이터 타입 판별과 타입 변환  (0) 2020.06.22
R(기초) 리스트(List)  (0) 2020.06.22
R(기초) 데이터프레임(Data Frame)(1부)  (0) 2020.06.21
R(기초) 배열(Array)  (0) 2020.06.19
R(기초) 행렬(Matrix)(3부)  (0) 2020.06.19

+ Recent posts