코딩, 딱 지금이 시작할때! (코딱지)
[R] 인덱싱(indexing) - 데이터에서 원하는 값 추출
Ufungi
2023. 1. 12. 09:11
인덱싱이란 raw 데이터로부터 원하는 데이터를 선별하는 작업이다.
벡터 인덱싱
[ ] 연산자
벡터[ ] 와 같이 쓰며 [ ] 안에 다음 함수와 연산자를 함께 자주 사용한다.
- c() → 여러 값을 추출
- : → 연속된 값을 추출
- - → 특정 값을 제외하고 추출
- 논리연산자 (<, ==, &, | 등) → 조건을 만족하는 값 추출
# 벡터 생성
> x <- c(1:10)
# 3번째 값 추출
> x[3]
[1] 3
# 1, 2 번째 값 추출
> x[c(1,2)]
[1] 1 2
# 1 ~ 3 번째 값 추출
> x[1:3]
[1] 1 2 3
# 1, 3번째 값 제외하고 추출
> x[c(-1,-3)]
[1] 2 4 5 6 7 8 9 10
# 5보다 작은 값 추출
> x[x < 5]
[1] 1 2 3 4
# 3보다 작거나 8보다 큰 값 추출
> x[x < 3 | x > 8]
[1] 1 2 9 10
리스트 인덱싱
# 리스트 생성
> x <- list(v1 = c(1:10),
+ v2 = c("a","b","c","d"),
+ mat = matrix(1:20, nrow=4),
+ df = iris[1:10,])
# 리스트 출력
> x
$v1
[1] 1 2 3 4 5 6 7 8 9 10
$v2
[1] "a" "b" "c" "d"
$mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
$df
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# 리스트의 3번째 원소 출력
> x[3] # [ ] 는 리스트로 추출
$mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> class(x[3])
[1] "list"
> x[[3]] # [[ ]] 는 3번째 원소의 원래 형식인 행렬로 추출
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> class(x[[3]])
[1] "matrix" "array"
데이터프레임 인덱싱
데이터프레임 인덱싱은 R에 내장되어있는 iris 데이터셋을 이용한다.
[ ] 연산자
데이터프레임[ i, j ] 을 이용하여 i 행 j 열의 값을 찾을 수 있다 (행렬에도 적용됨).+
컬럼 추출시 [숫자] 는 데이터프레임, [[숫자]] 와 [,숫자]는 벡터로 출력
# 2행 3열 추출
> iris[2,3] # 벡터로 출력
[1] 1.4
# 2행 추출
> iris[2,] # 데이터프레임으로 출력
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2 4.9 3 1.4 0.2 setosa
# 2열 추출
> iris[2] # 데이터프레임으로 출력
Sepal.Width
1 3.5
2 3.0
3 3.2
4 3.1
5 3.6
6 3.9
7 3.4
8 3.4
9 2.9
10 3.1
11 3.7
12 3.4
13 3.0
...
> iris[,2] # 벡터로 출력
[1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2 3.5 3.6 3.0
[40] 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3.0 2.8 3.0
[79] 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0
[118] 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2 3.3 3.0 2.5 3.0 3.4 3.0
> iris[[2]] # 벡터로 출력
[1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2 3.5 3.6 3.0
[40] 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3.0 2.8 3.0
[79] 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0
[118] 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2 3.3 3.0 2.5 3.0 3.4 3.0
# 2행 1,5열 추출
> iris[2,c(1,5)] # 데이터프레임으로 출력
Sepal.Length Species
2 4.9 setosa
# 1~4행 & 1~3열 추출
> iris[1:4,1:3] # 데이터프레임으로 출력
Sepal.Length Sepal.Width Petal.Length
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
또한 컬럼명을 이용해 값을 추출할 수도 있다 (행렬에도 적용됨).
[ , "컬럼명"] => 벡터로 출력
["컬럼명"] => 데이터프레임으로 출력
> iris[,"Species"] # 벡터 형식으로 출력
[1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[15] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[29] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa setosa setosa versicolor versicolor versicolor versicolor versicolor versicolor
[57] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[71] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[99] versicolor versicolor virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[113] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[141] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica # 팩터
> iris["Species"] # 데이터프레임 형식으로 출력
Species
1 setosa
2 setosa
3 setosa
4 setosa
5 setosa
6 setosa
7 setosa
8 setosa
9 setosa
10 setosa
11 setosa
...
$ 연산자
데이터프레임$컬럼명을 이용해 컬럼을 벡터로 추출할 수 있다 (행렬에서는 사용 불가).
> iris$Species
[1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[15] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[29] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa setosa setosa versicolor versicolor versicolor versicolor versicolor versicolor
[57] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[71] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[99] versicolor versicolor virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[113] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
[141] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica