10.4 데이터 프레임의 구성요소에 접근하기
데이터 프레임의 구성요소(행과 열)에 접근하는 방법에는 리스트식 접근 또는 행렬식 접근 방법이 있습니다.
10.4.1 리스트 접근
데이터 프레임의 컬럼(열)에 대한 접근은 리스트처럼 [ ]
, [[]]
, 또는 $
등을 이용하여 접근할 수 있습니다.
이러한 데이터 프레임 컬럼의 접근 결과를 변수 할당연산자로 할당하면 이것을 컬럼을 선택(select)한다고 합니다.
## []를 이용하여 데이터 프레임의 컬럼에 접근할 수 있습니다.
## 반환되는 결과들은 "데이터 프레임"의 구조입니다.
c(1, 3)] # 컬럼의 위치를 정수형 벡터로 표현할 수 있습니다.
emp.data1[c("emp_id", "salary")] # 문자형 벡터로 표현할 수 있습니다.
emp.data1[c(F, T, F, F)] # 논리형 벡터로 표현할 수 있습니다.
emp.data1[
## [[]]를 이용하여 데이터 프레임의 특정 컬럼에 접근할 수 있습니다.
## 반환되는 결과는 "벡터" 구조입니다.
2]] # 컬럼의 위치를 정수형으로 지정합니다.
emp.data1[["emp_name")]] # 원하는 컬럼의 이름을 문자열로 지정합니다.
emp.data1[[c(F, T, F, F)]] # 논리형 벡터로는 특정 컬럼을 지정할 수 없습니다.
emp.data1[[
## $기호를 이용하여 데이터 프레임의 특정 컬럼에 접근하기 위해서는 컬럼의 이름을 지정합니다.
## 반환되는 결과는 "벡터" 구조입니다.
$"emp_name" # 원하는 컬럼의 이름을 문자열로 지정합니다. emp.data1
## Error: <text>:10:22: 예기치 않은 ')'입니다
## 9: emp.data1[[2]] # 컬럼의 위치를 정수형으로 지정합니다.
## 10: emp.data1[["emp_name")
## ^
[[
또는 $
기호를 이용한 접근은 유사한 면이 있습니다. [
로 접근하면 복수 개의 컬럼에 접근할 수 있고 접근한 결과를 데이터 프레임 구조로 결과를 반환하는 반면에 [[]]
와 $
를 이용하면 하나의 컬럼에 대해서만 접근할 수 있고 그 결과를 벡터로 반환한다는 점에서 차이점이 있습니다.
10.4.2 행렬 접근
데이터 프레임은 행과 열에 대한 인덱스를 제공하고 있기 때문에 행렬처럼 액세스 할 수도 있습니다.
이를 설명하기 위해 R에서 이미 사용 가능한 데이터 세트를 사용합니다.
사용 가능한 데이터 세트는 명령 library(help = "datasets")
또는 data()
함수로 나열 할 수 있습니다.
library(help = "datasets")
# 또는
data()
## 특정 패키지에서 제공하는 데이터 세트를 확인할 수도 있습니다. (예; nycflights13 패키지)
data(package="nycflights13") # nycflights13 패키지에 있는 데이터 세트를 보여 줍니다.
다음에서는 trees
데이터 세트를 이용해서 행렬식 접근을 해 보겠습니다. 이 trees
데이터 세트는 검은 체리 나무의 둘레(Girth
), 높이(Height
) 그리고 부피(Volume
)에 대한 데이터를 포함하고 있습니다.
# trees 데이터 세트의 구조를 파악합니다.
str(trees) # 31개의 행과 3개의 컬럼으로 구성된 것을 확인할 수 있습니다.
## 'data.frame': 31 obs. of 3 variables:
## $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
## $ Height: num 70 65 63 72 81 83 66 75 80 75 ...
## $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
# 데이터를 확인합니다.
head(trees, 3) # 데이터 세트의 앞에 있는 3개의 데이터를 확인합니다.
## Girth Height Volume
## 1 8.3 70 10.3
## 2 8.6 65 10.3
## 3 8.8 63 10.2
tail(trees, 5) # 데이터 세트의 맨 뒤에 있는 5개의 데이터를 확인합니다.
## Girth Height Volume
## 27 17.5 82 55.7
## 28 17.9 80 58.3
## 29 18.0 80 51.5
## 30 18.0 80 51.0
## 31 20.6 87 77.0
## 행렬식 접근을 해 보겠습니다.
# 행의 접근
2:3,] # 2번째, 3번째 행의 모든 컬럼을 반환합니다. (정수형 벡터) trees[
## Girth Height Volume
## 2 8.6 65 10.3
## 3 8.8 63 10.2
$Height > 82,] # Height 컬럼의 조건( > 82)을 만족하는 행을 반환합니다. trees[trees
## Girth Height Volume
## 6 10.8 83 19.7
## 17 12.9 85 33.8
## 18 13.3 86 27.4
## 31 20.6 87 77.0
# 이러한 행의 선택을 필터링한다고 합니다. (filtering)
# 열의 접근
2:3] # 2번째, 3번째 열의 모든 행을 반환합니다 (selection) trees[ ,
## Height Volume
## 1 70 10.3
## 2 65 10.3
## 3 63 10.2
## 4 72 16.4
## 5 81 18.8
## 6 83 19.7
## 7 66 15.6
## 8 75 18.2
## 9 80 22.6
## 10 75 19.9
## 11 79 24.2
## 12 76 21.0
## 13 76 21.4
## 14 69 21.3
## 15 75 19.1
## 16 74 22.2
## 17 85 33.8
## 18 86 27.4
## 19 71 25.7
## 20 64 24.9
## 21 78 34.5
## 22 80 31.7
## 23 74 36.3
## 24 72 38.3
## 25 77 42.6
## 26 81 55.4
## 27 82 55.7
## 28 80 58.3
## 29 80 51.5
## 30 80 51.0
## 31 87 77.0
# 행과 열의 동시 접근
10:12,2] # 10~12번째의 2번깨 컬럼 값을 반환합니다. (벡터 반환) trees[
## [1] 75 79 76
10:12, 2, drop = FALSE] # 데이터 프레임으로 반환합니다. trees[
## Height
## 10 75
## 11 79
## 12 76
한 개의 컬럼에 대하여 반환할 때는 그 결과가 벡터 형으로 반환됩니다. 이를 데이터 프레임 형태로 반환하고 싶을 때에는 drop = FALSE
인수를 설정해 주면 됩니다.