Idealim
article thumbnail
Published 2023. 12. 4. 20:36
[R] 데이터 프레임 Data/R

데이터 프레임

`데이터 프레임`은 행렬(2차원)과 비슷하지만, 각 열들이 서로 다른 데이터 타입을 가질 수 있습니다. (Python 의 Pandas.dataframe과 유사합니다.) 사용방법(데이터 접근, 추가 등)은 행렬과 거의 동일하기 때문에 다음 을 참고하길 추천드립니다.

데이터 프레임 생성

`data.frame()`을 이용하여 데이터 프레임을 생성할 수 있습니다.

서로 다른 데이터 타입을 가지는 벡터를 각 열로 넣을 수 있다는 것을 확인할 수 있는데요.

여기서 stringAsFactors=FALSE로 설정할 경우 char형 벡터가 자동으로 범주형 데이터로 바뀌는 것을 막습니다.

데이터 접근하기

데이터 프레임에서의 데이터 접근 방법도 리스트와 동일합니다.

추가적으로 행렬의 데이터 접근 방식도 사용가능합니다.

행렬과 동일하게 단일 열이나 행만 남은 경우 벡터로 자동 변환되는 차원 축소가 일어납니다.

행렬에서와 마찬가지로 drop=FALSE를 통해 단일 행 / 열을 가지는 데이터 프레임으로 유지할 수 있습니다.

데이터 필터링하기

첫번째로는 `불리언 인덱싱`을 이용하여 데이터 프레임을 필터링해보겠습니다.

불리언 인덱싱 말고도 `subset()`을 이용하여 데이터 프레임을 필터링할 수 있습니다.

데이터 프레임 확인하기

str(d) # 데이터 프레임 구조 확인
class(d) # 클래스 확인
head(d) # 앞에 있는 데이터 일부분 출력
tail(d) # 뒤에 있는 데이터 일부분 출력
summary(d) # 데이터 프레임 요약

데이터 추가하기

데이터 프레임에서도 `cbind()`, `rbind()`를 이용하여 데이터를 추가할 수 있습니다.

데이터 프레임 합치기

`merge()`를 이용하여 데이터 프레임을 합칠 수 있습니다.

두 데이터 프레임을 합칠 때 자동으로 공통되는 열의 이름을 기준으로 합칠 수 있습니다. 

`by`를 통해 병합할때 기준이 되는 열을 선택할 수 있습니다. 또한, `all=TRUE`를 이용해 값이 없는 부분은 NA로 처리하여 모든 행을 합칠 수 있습니다. 

외부 데이터들을 모아 데이터 프레임을 합칠때 내용은 같지만 이름은 다른 경우가 존재할 수 있습니다. 위 코드처럼 첫번째 데이터 프레임에서는 names 로 두번째 데이터 프레임에서는 first_names 로 두 이름이 다르지만, 내용은 같을 수도 있는데요. 이런 경우 `by.x`와 `by.y`를 통해 명시적으로 같은 열임을 설정할 수 있습니다.

데이터 테이블

데이터 테이블에 대해서도 간단히 알아보겠습니다. 데이터 프레임을 대신하여 `데이터 테이블`을 이용할 수 있는데요. `데이터 테이블`은 색인을 사용하여 더 빠르게 조건 검색이 가능하고 데이터 연산이 편리한 장점을 가지고 있습니다.

정리

지금까지 R의 데이터 구조들에 대해 알아보았는데요. 제가 R을 공부하면서 배운 핵심 내용들과 개인적으로 헷갈린 부분들을 위주로 다뤘기 때문에 부족한 부분도 많이 있습니다. 글을 읽다가 궁금한 부분이 생기면 직접 코딩해보거나 구글링(혹은 Chatgpt)하면 대부분 해결하실 수 있을거라 생각합니다. (저도 글을 쓰면서 궁금한 부분들은 위 과정으로 해결했습니다!)

이상으로 R의 데이터 컬렉션(구조)편을 마무리하겠습니다. 긴 글 읽어주셔서 감사합니다.

반응형
profile

Idealim

@Idealim

읽어주셔서 감사합니다. 잘못된 내용이 있으면 언제든 댓글로 피드백 부탁드립니다.