벡터와 리스트는 R에서 데이터를 저장하고 조작하는 기본적인 데이터 구조입니다.
이 두 가지를 효과적으로 사용하는 것은 R에서 데이터 분석을 수행하는 데 매우 중요합니다.
이번 글에서는 벡터와 리스트의 생성, 조작 방법, 그리고 lapply()와 sapply() 함수를 사용하여 리스트에 함수를 적용하는 방법에 대해 설명하겠습니다.
벡터 생성 및 인덱싱
벡터 생성
벡터는 동일한 데이터 유형의 값들을 저장하는 1차원 배열입니다. 벡터를 생성하는 가장 기본적인 방법은 c() 함수를 사용하는 것입니다.
- c() 함수
- 구조: c(element1, element2, ...)
vec <- c(1, 2, 3, 4, 5)
이 코드는 숫자 1부터 5까지를 포함하는 벡터 vec을 생성합니다.
- : 연산자
- 숫자의 연속적인 범위를 생성할 때 : 연산자를 사용합니다.
vec <- 1:5 # 결과: c(1, 2, 3, 4, 5)
이 코드는 1부터 5까지의 연속된 숫자를 포함하는 벡터를 생성합니다.
벡터 인덱싱
벡터의 특정 요소에 접근하거나, 벡터의 하위 집합을 선택하려면 인덱싱을 사용합니다. R에서 인덱스는 1부터 시작합니다.
- 기본 인덱싱:
- 구조: vector[index]
vec <- c(10, 20, 30, 40, 50)
vec[3] # 결과: 30 (세 번째 요소)
- 벡터 인덱싱 : 인덱스를 벡터로 지정하여 여러 요소를 한 번에 선택할 수 있습니다.
vec[c(2, 4)] # 결과: c(20, 40) (두 번째와 네 번째 요소)
- 조건에 따른 인덱싱 : 조건문을 사용해 특정 조건을 만족하는 요소를 선택할 수 있습니다.
vec[vec > 25] # 결과: c(30, 40, 50) (25보다 큰 값들)
리스트 생성 및 요소 접근
리스트는 서로 다른 데이터 유형을 포함할 수 있는 1차원 데이터 구조입니다. 벡터와 달리 리스트는 숫자, 문자, 논리값, 심지어 다른 리스트까지 포함할 수 있습니다.
리스트 생성
리스트를 생성하려면 list() 함수를 사용합니다.
- list() 함수:
- 구조: list(element1, element2, ...)
my_list <- list(name = "Alice", age = 25, scores = c(90, 95, 85))
이 코드는 세 가지 요소(이름, 나이, 점수)를 포함하는 리스트를 생성합니다. 요소에 이름을 지정하면 나중에 접근할 때 유용합니다.
리스트 요소 접근
리스트의 요소에 접근하는 방법에는 여러 가지가 있습니다.
- $ 연산자 : 요소 이름을 사용하여 리스트 요소에 접근합니다.
my_list$name # 결과: "Alice"
- [[ ]] 연산자 : 인덱스를 사용하여 리스트 요소에 접근합니다.
my_list[[2]] # 결과: 25 (두 번째 요소)
- [ ] 연산자 : 리스트의 하위 리스트를 반환합니다. 인덱싱 결과는 리스트 형식으로 반환됩니다.
my_list[2] # 결과: list(age = 25)
벡터와 리스트의 길이, 요소 추가 및 제거
벡터와 리스트의 길이 확인
벡터나 리스트의 길이를 확인하려면 length() 함수를 사용합니다.
- length() 함수:
- 구조: length(object)
length(vec) # 결과: 5 (벡터 vec의 길이)
length(my_list) # 결과: 3 (리스트 my_list의 길이)
요소 추가
- 벡터에 요소 추가 : 벡터에 요소를 추가할 때는 c() 함수를 사용해 기존 벡터와 새로운 요소를 결합합니다
vec <- c(vec, 60) # 결과: c(10, 20, 30, 40, 50, 60)
- 리스트에 요소 추가 : 리스트에 요소를 추가할 때는 인덱스 또는 이름을 사용하여 새 요소를 할당합니다.
my_list$gender <- "Female"
# 또는
my_list[[4]] <- "Female"
요소 제거
- 벡터에서 요소 제거 : 특정 요소를 제거하려면 음수 인덱스를 사용하여 그 요소를 제외한 나머지 요소를 반환합니다.
vec <- vec[-3] # 결과: c(10, 20, 40, 50, 60) (세 번째 요소 제거)
- 리스트에서 요소 제거 : 리스트에서 요소를 제거하려면 NULL을 할당합니다.
my_list$age <- NULL # 결과: 나이(age) 요소 제거
lapply()와 sapply()를 사용해 리스트에 함수 적용
R에서는 lapply()와 sapply() 함수를 사용하여 리스트의 각 요소에 함수를 적용할 수 있습니다.
lapply() 함수
리스트의 각 요소에 주어진 함수를 적용하고, 결과를 리스트로 반환합니다.
- 구조: lapply(list, function)
my_list <- list(a = 1:5, b = 6:10)
result <- lapply(my_list, sum) # 결과: list(a = 15, b = 40)
이 코드는 리스트 my_list의 각 요소에 sum() 함수를 적용하여 각 벡터의 합을 계산하고, 그 결과를 리스트로 반환합니다.
sapply() 함수
lapply()와 유사하지만, 결과를 벡터나 행렬로 반환합니다. 리스트 요소의 길이가 동일하거나 간단한 데이터일 때 유용합니다.
- 구조: sapply(list, function)
result <- sapply(my_list, sum) # 결과: c(a = 15, b = 40)
이 코드는 lapply()와 동일한 작업을 수행하지만, 결과를 벡터로 반환합니다.
정리
- 벡터 생성 및 인덱싱: c() 함수와 : 연산자를 사용하여 벡터를 생성하고, 인덱싱을 통해 특정 요소에 접근합니다.
- 리스트 생성 및 요소 접근: list() 함수로 리스트를 생성하며, $, [[ ]], [ ] 연산자를 사용하여 리스트 요소에 접근합니다.
- 벡터와 리스트의 길이, 요소 추가 및 제거: length() 함수를 사용해 길이를 확인하고, 벡터와 리스트에 요소를 추가하거나 제거할 수 있습니다.
- lapply()와 sapply(): 리스트의 각 요소에 함수를 적용할 때 lapply()는 리스트를 반환하고, sapply()는 벡터나 행렬을 반환합니다.
이번 글에서는 R에서 데이터 분석의 기본이 되는 벡터와 리스트의 생성, 조작 방법을 살펴보았습니다. 벡터와 리스트는 R의 강력한 데이터 구조로, 이를 효과적으로 활용하면 복잡한 데이터 분석 작업도 쉽게 처리할 수 있습니다. 특히, lapply()와 sapply() 함수는 리스트에 함수를 적용할 때 매우 유용하므로 잘 숙지하고 있으면 좋습니다.
감사합니다!
'프로그래밍 언어 > R' 카테고리의 다른 글
13. R 함수를 이용한 데이터 시각화 1️⃣ (기본 그래픽 시스템) (1) | 2024.09.03 |
---|---|
12. R에서의 데이터 프레임 생성 및 조작 (0) | 2024.08.31 |
10. R의 기본 문법과 데이터 조작 심화 - 조건문과 반복문 이해 (0) | 2024.08.27 |
09. R에서 사용하는 기본 함수 이해 - 사용자 정의 함수 생성 (0) | 2024.08.25 |
08. R에서 사용하는 기본 함수 이해 (0) | 2024.08.24 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!