Menu
Coddy logo textTech

split()으로 그룹화하기

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 39번째.

split(values, groups)는 각 값을 groups의 일치하는 요소가 지정한 그룹에 넣습니다. 결과는 그룹당 하나의 요소를 가지며, 정렬된 순서의 그룹 이름을 따릅니다:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(names(by_cat))
print(by_cat[["food"]])

출력:

[1] "food" "fun"  "rent"
[1] 10 30

split()과 sapply()를 결합하여 각 그룹에 대한 요약을 하나씩 계산하세요:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(sapply(by_cat, sum))
print(sapply(by_cat, length))

출력:

food  fun rent 
  40   40   20 
food  fun rent 
   2    1    1 

값은 텍스트일 수도 있습니다. 예를 들어 이름을 첫 글자별로 그룹화할 수 있습니다:

names <- c("ana", "bo", "al", "bea", "cy")
groups <- split(names, substr(names, 1, 1))
for (letter in names(groups)) {
  cat(letter, ":", paste(groups[[letter]], collapse = ", "), "\n")
}

출력:

a : ana, al 
b : bo, bea 
c : cy 

그룹에는 적어도 하나의 값이 속할 때만 그룹이 존재하므로, 비어 있을 수 있는 그룹을 읽기 전에 %in% names()로 확인하세요:

by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))

출력:

[1] FALSE
challenge icon

챌린지

쉬움

category_totals(amounts, categories)를 완성하세요. 카테고리별로 한 줄씩 알파벳 순서로 반환하세요. 총액과 해당 카테고리의 금액 개수를 포함한 형식은 food: 40 (2 items)입니다.

제공된 코드는 금액과 카테고리를 길이가 같은 쉼표로 구분된 두 줄로 읽고, 반환된 각 줄을 출력합니다.

직접 해보기

category_totals <- function(amounts, categories) {
  # 여기에 코드를 작성하세요
  character(0)
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(strsplit(input[1], ",")[[1]]), strsplit(input[2], ",")[[1]]), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러