그룹 요약
Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 40번째.
tapply(values, groups, f)는 한 번의 호출로 값을 그룹화하고 각 그룹에 f를 적용합니다. 다음 sapply(split(values, groups), f)와 같은 결과를 제공합니다.
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, sum))
print(tapply(amounts, category, max))출력:
food fun rent
40 40 20
food fun rent
30 40 20 결과는 정렬된 순서로 그룹별로 이름이 지정되므로, [[ ]]는 한 그룹을 읽고 names()는 그룹을 나열합니다:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))출력:
[1] 20
[1] "food" "fun" "rent"요약 함수는 직접 정의할 수 있습니다. 여기서는 각 그룹에서 25를 초과하는 주문의 수를 계산합니다:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))출력:
food fun rent
1 1 0 결과는 이름이 지정된 벡터이므로 sort()와 which.max()가 가장 큰 그룹을 찾습니다. which.max()는 값이 같은 경우 첫 번째 값을 반환합니다:
amounts <- c(10, 20, 30, 40, 5)
category <- c("food", "rent", "food", "fun", "rent")
totals <- tapply(amounts, category, sum)
print(names(totals)[which.max(totals)])
print(names(sort(totals, decreasing = TRUE)))출력:
[1] "food"
[1] "food" "fun" "rent"챌린지
쉬움city_report(cities, temps)를 완성하세요. 도시별로 알파벳순으로 한 줄씩 반환하세요. 예: oslo: avg 4.5, max 9. 평균 기온은 소수점 첫째 자리까지 반올림하고 최고 기온도 포함하세요. 그런 다음 평균이 가장 높은 도시를 뒤에 붙여 Warmest: 를 추가하세요(평균이 같으면 알파벳순으로 가장 먼저 나오는 도시).
제공된 코드는 도시와 기온을 길이가 같은 쉼표로 구분된 두 줄로 읽고, 반환된 각 줄을 출력합니다.
직접 해보기
city_report <- function(cities, temps) {
# 여기에 코드를 작성하세요
character(0)
}
# 제공된 입출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러