워라밸 중독자

[R] 인덱싱(indexing) - 데이터에서 원하는 값 추출 본문

코딩, 딱 지금이 시작할때! (코딱지)

[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