해당 포스트는 R에서 반복문(for문)을 이용하여 데이터 분할 후 여러 변수에 나누어 저장하는 방법을 설명합니다.
INTRO
데이터 분석 작업을 하다보면 통합된 데이터를 분할하여 연도별 또는 범주별로 나누어 저장해야 하는 일이 간혹 발생합니다. 반복문을 이용한다면 데이터셋 분할은 가능하지만, 각기 다른 객체명을 지정해가며 저장하는 방법은 쉽게 떠오르지 않습니다. R에서는 이런 상황을 위해 assign()
함수를 제공하고 있으며, 아래에서 예시와 함께 사용법을 설명 하겠습니다.
이번 설명에서는 iris 데이터셋을 이용하며, Species별(setosa, versicolor, virginica)로 데이터를 분할하고 'iris_'를 접두사 저장하는 방법을 설명합니다.
1. 데이터셋 로드
먼저 data()
함수를 이용하여 iris 데이터셋을 불러옵니다.
data(iris)
head(iris)
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
2. Species에서 unique 값 추출
데이터셋 필터링 및 신규 객체명으로 사용할 벡터명 리스트를 생성합니다. 참고로, unique()
함수는 벡터 내 중복을 제거한 유니한 값들만 추출해 주는 함수입니다.
types <- as.vector(unique(iris$Species))
types
[1] "setosa" "versicolor" "virginica"
3. 반복문을 이용하여 서브 객체 생성하기
위에서 생성한 types 객체를 순환하며 iris_객체명
의 이름을 가지는 부분 데이터셋을 생성합니다.
- #1 : 문자 'iris'와 types에서 선택된 type명을 밑줄(
_
)로 이어붙여 저장합니다. - #2 : iris 데이터셋에서
Species == type으
로 선택된 데이터셋을 추출하고, #1에서 생성한 객체명에 저장합니다.
for(type in types){
new_data <- paste("iris", type, sep = "_") #1
assign(new_data, subset(iris, Species == type)) #2
}
마무리
위 결과를 보면 iris의 Species별로 객체가 생성된 것을 볼 수 있습니다. 위에서 설명한 코드를 변형한다면 연도별 부분 데이터셋을 만들거나, 동일 간격으로 분할된 데이터셋을 생성할 수 있으니 보유하고 있는 데이터셋에 적용해 보시면 좋을 것 같습니다.
관련 링크
[1] RDocumentation - iris: Edgar Anderson's Iris Data
[2] [R] 문자열 분리, 공백 제외 문자 카운트 하기 (feat. stringr)
[3] [R] R에서 반응 변수 비율에 맞춰 데이터셋 분할하기 (15회 ADP 실기 기출)