다른 언어를 쓰다 R을 처음 접하면 요소에 접근하는 방법이 헷갈린다. 정리하며 익혀보도록 하자!
첨자(Indexing)
R에서 요소근은 $, [], [[]], [,]등 여러 형태로 나타난다. 또 R언어는 인덱스가 1부터 시작한다. 프로그래밍을 처음 배울때는 왜 0부터 시작하지? 했는데 이제는 왜 1부터 시작하지? 라는 생각이 든다. matlab도 1부터 시작하는 것을 보면 아마 통계기반 언어들의 특징인것 같다. 통계를 위한 데이터들을 나타낼 때 0번째는 의미가 없기 때문이 아닐까한다.
그럼 이제 벡터, 행렬, 배열, 리스트, 데이터 프레임등 열거형 데이터의 인덱싱을 알아보자!
벡터 인덱싱
벡터는 다른 언어와 마찬가지로 [](대괄호)를 사용한다.
test.vector = 1:8
test.vector[1]
# [1] 1
인덱스에 벡터를 넣어 여러 값을 한번에 추출 할 수 있다. 주의할 점은 height[c(1,3)]과 height[1,3]은 완전히 다른 의미다. 전자는 height의 1,3번째 요소를 추출 하는 것이고 후자는 height벡터의 1행 3열을 의미한다. heigth벡터는 1차원이기 때문에 차원 오류를 반환한다.
test.vector[c(2,5,3)]
# [1] 2 5 3
test.vector[2,5,3]
# Error in height[1, 3] : incorrect number of dimensions
test.vector[4:6]
# [1] 4 5 6
사실 우리는 이미 벡터를 이용한 인덱싱을 한적이 있다. letters[1:4]는 letters라는 기본 상수 벡터에서 1:4 벡터로 인덱싱을 한것이다.
파이썬과 달라 주의할 점은 음수 ("-")로 인덱싱은 요소를 제외하는 것을 의미한다.
test.vector[-3]
# [1] 1 2 4 5 6 7 8
test.vector[-6:-2]
# [1] 1 7 8
test.vector[-c(1,5,6,7)]
# [1] 2 3 4 8
벡터의 요소에 이름을 부여한 후 이름으로 접근 할 수 도 있다.
names(test.vector) = letters[1:length(test.vector)]
test.vector
# a b c d e f g h
# 1 2 3 4 5 6 7 8
test.vector['a']
# a
# 1
test.vector[c('c','f','g')]
# c f g
# 3 6 7
이름을 붙이는 것은 데이트를 관리할 때 도움된다.
행렬 인덱싱
행렬,배열 자료형의 다차원 인덱싱은 C언어와 비슷하다.
m1 = matrix(1:6,nrow = 2,byrow = T)
m1
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
# 2행 추출
m1[2,]
# [1] 4 5 6
# 3열 추출
m1[,3]
# [1] 3 6
# 1행 2열 추출
m1[1,2]
# [1] 2
역시 벡터로 인덱싱 할 수 있다.
m1 = matrix(1:6,nrow = 2,byrow = T)
m1
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
# 1행 2~3행 추출
m1[1,2:3]
# [1] 2 3
# 1~2행 1~2열 추출
m1[1:2,2:3]
# [,1] [,2]
# [1,] 2 3
# [2,] 5 6
데이터 프레임 인덱싱
예시 데이터 프레임을 만들어보자.
df = data.frame(x = 1:5,y = letters[1:5], z = seq(10,50,10))
# x y z
# 1 1 a 10
# 2 2 b 20
# 3 3 c 30
# 4 4 d 40
# 5 5 e 50
기본적으로 행과 열을 추출할 때는 행렬과 같다.
# 2열 추출
df[2,]
# [1] 10 20 30 40 50
# 3행 추출
df[,3]
# x y z
# 2 2 b 20
# 1,3행 2~3열 추출
df[c(1,3),2:3]
# y z
# 1 a 10
# 3 c 30
열 이름으로 추출 할 수도 있다.
df['x']
# x
# 1 1
# 2 2
# 3 3
# 4 4
# 5 5
df[,'x']
# [1] 1 2 3 4 5
df$x
# [1] 1 2 3 4 5
'Languages > R' 카테고리의 다른 글
[R] R언어의 열거형 데이터 타입 (0) | 2021.11.01 |
---|---|
[R] R 언어 훑어보기 (0) | 2021.10.31 |