R Cook Book 5장: 데이터 구조
데이터 구조
벡터
벡터는 숫자, 문자열 혹은 논리값 중의 한 가지만 포함하며 이들을 섞을 수는 없다
특징
-
한 벡터의 모든 원소는 같은 자료형 또는 R용어 정의에 따르면, 같은 모드를 가지고 있어야 한다 (벡터들은 동질적이다)
-
벡터는 위치로 인덱스된다
- v[2]는 v의 두번째 원소를 뜻한다
-
벡터는 여러개의 위치로 인덱스될 수도 있으며, 이때 하위 벡터를 반환한다
- v[c(2,3)]은 v의 두번째와 세번째 원소로 이루어진 하위 벡터이다
-
벡터 원소들은 이름을 가질 수 있다
-
v <- c(10,20,30) names(v) <- c("Moe","Larry","Curly") print(v) #Moe Larry Curly # 10 20 30
-
리스트
리스트의 원소들은 서로 다른 모드들을 포함할 수 있다
특징
- 리스트(List)는 이질적이다
- 여러 자료형의 원소들이 포함될 수 있다. 심지어 리스트나 데이터 프레임 같이 구조화된 다른 객체들도 포함할 수 있다
- 리스트는 위치로 인덱스 된다
- lst[[2]]는 lst의 두번째 원소를 뜻한다
- 리스트에서 하위 리스트를 추출할 수 있다
- lst[c(2,3)]은 lst의 둘째와 셋째 원소로 이루어진 하위 리스트다
- 리스트의 원소들은 이름을 가질 수 있다
- lst[[“Moe”]]와 lst$Moe는 둘 다 ‘Moe’라는 이름의 원소를 지칭한다
모드
물리적인 자료형
- R에서, 모든 객체에는 그것이 메모리에 어떻게 저장되는지를 가리키는 ‘모드’가 있다
- 숫자로 저장될 것인가, 문자열, 다른 객체로의 포인터로 된 리스트, 함수, 아니면 기타 다른것으로 저장될 것인가를 나타내는게 모드이다
- mode(3.1415) -> “numeric”
클래스
추상적인 자료형
-
모든 객체는 추상 자료형인 ‘클래스’도 가지고 있다. 거리, 시간의 한 지점 또는 무게 등 어떤 하나의 숫자로 나타낼 수 있는 것의 종류가 많다. 이 객체들은 모두 숫자로 저장되기 때문에 ‘수치형’이라는 모드가 되지만, 각각 해석 방법이 다르므로 클래스는 상이할 수 있다
-
d <- as.date("2010-03-15") mode(d) # numeric class(d) # date
-
단일값 (Scalar)
- 일부 소프트웨어에서는 단일값과 벡터를 다르게 취급하지만, R에서는 대략 같다고 보면된다
- 단일값은 하나의 원소만 가지고 있는 벡터를 말한다
- ‘원소가 하나인 벡터’를 지칭
- ex) R에서 내장된 상수 pi는 3.14159를 반환한다
- 인덱싱도 되지만 pi[2]를 할시 두번째 원소를 물어보면 값이 반환되지 않는다
- ex) R에서 내장된 상수 pi는 3.14159를 반환한다
행렬(Matrix)
-
R에서 행렬(Matrix)은 차원을 가진 벡터다. 벡터에 차원을 정해 주기만 하면 행렬로 바꿀 수 있다
-
A <- 1:6 dim(A) # Null print(A) # 1 2 3 4 5 6 dim(A) <- c(2,3) print(A) # [,1][,2][,3] #[1,] 1 3 5 #[2,] 2 4 6
- 위와 같이 dim 속성을 설정하면 벡터에 차원이 주어진다.
-
배열
-
행렬에서 다뤘던 특징은 3차원이나, 더 나아가 ‘n차원’ 구조에서도 일반화 된다 주어진 벡터(또는 리스트)에 더 많은 차원을 부여하면 되는 것이다
-
D <- 1:12 dim(D) <- c(2,3) print(D) #,, 1 # [,1][,2][,3] #[1,] 1 3 5 #[2,] 2 4 6 #,, 2 # [,1][,2][,3] #[1,] 7 9 11 #[2,] 8 10 12
- R은 한번에 하나의 ‘단면’만 출력했다. 3차원 구조를 2차원에 표현할 수 없기 때문이다
-
요인(Factors)
- R은 벡터에 있는 고유한 값의 정보를 얻어 내는데, 이 교유 값들을 요인의 ‘수준’(level)이라고 일컫는다.
- 요인들은 간단하고 효율적인 형태로 데이터 프레임에 저장된다. 다른 프로그래밍 언어에서는
요인을 ‘열거형 값(enumerated value)들로 이루어진 벡터로 표현한다’
- 범주형 변수: 요인 하나는 범주형 변수를 나타낼 수 있다
- 집단 분류: 데이터 항목에다가 집단에 따른 라벨을 붙이거나 태깅을 할 때 쓰는 방법이다
데이터 프레임
- 데이터 프레임은 강력하고 유연한 구조이다. 데이터 프레임은 테이블로 된(사각형) 데이터
구조여서 행과 열이 있다. 하지만 행렬로 구현되지는 않았다. 오히려 리스트라고 볼 수 있다
- 데이터 프레임이라는 리스트의 원소는 벡터와(또는) 요인이다
- 그 벡터와 요인들은 데이터 프레임의 열에 해당된다
- 그 벡터와 요인들은 동일한 길이어야 한다. 다시 말하면 모든 열은 동일한 높이여야 한다
- 동일한 높이의 열들은 데이터 프레임을 사각형으로 만든다
- 열에는 이름이 있어야 한다