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 30split()과 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챌린지
쉬움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")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러