이 게시물은 데이터에 사용되는 집계 함수에 대한 간단한 검토를 제공합니다.프레임 및 몇 가지 흥미로운 용도를 제공합니다:사소한하지만 편리한에서 내가 집계로 해결 한 가장 복잡한 문제에.
Aggregate
은 이름에서 알 수 있듯이 하위 데이터의 각 열에FUN
매개 변수로 지정된 함수를 적용하여 입력 된data.frame
디.에프.by
입력 매개 변수로 정의된 프레임입니다.
by
매개 변수는list
이어야 합니다. 그러나data.frame
의(명명된)열 목록으로 처리되므로data.frame
중 하나 이상의 열을by
매개 변수로 전달할 수도 있습니다. 흥미롭게도 이러한 열이x
으로 입력 된 열과 같은data.frame
인 경우 해당 열은FUN
함수로 전달되지 않습니다.
적용 할 함수는vector
을 받아 들일 수 있어야합니다(data.frame
열의 일부를 입력으로 호출하므로).
하위 데이터.by
입력 매개 변수로 정의된 프레임은 논리적 인덱싱으로 생각할 수 있습니다:
d.f <- data.frame(rating = c("AAA", "A", "A", "AAA", "BB", "BB", "AAA", "A"))i <- 1by <- d.f$ratingsub.data.frame <- d.f, ]
1 과length(unique(by))
사이의 모든i
에 대해이 작업을 수행하십시오. by
변수는data.frame
중 하나(또는 그 이상)열에 동의 할 필요는 없지만 아무 것도 될 수 있습니다. 따라서by
으로 전달 된 변수의 고유 값에 대해 사이클 변수를 실행하는for
사이클과data.frame
하위의 각 열에FUN
로 전달 된 함수를 적용하는sapply
에 의해aggregate
기능을 재현 할 수 있습니다.데이터.프레임. 그러나 이러한 해결 방법은 문서화하기가 매우 어려울 것입니다.이 코드가 실제로 무엇을하고 있는지(그리고 왜)불분명 할 것입니다.
Aggregate
는 항상 결과로data.frame
을 반환합니다. 이data.frame
에는 입력 매개 변수by
의(현재 고유 한)값이 첫 번째 열로 포함 된 다음 입력 된data.frame
의 열 부분에 적용된FUN
매개 변수의 함수 호출 결과를 포함하는 열이 포함됩니다. 함수FUN
가 여러 값을 반환하면 결과data.frame
의 열 클래스가list
가되거나list
가 캐스팅 될 수 있습니다(아래 마지막 예제 참조).
함수 호출은data.frame
의 명명된 열이 아닌 이름 없는 벡터에 적용되므로data.frame
의 이름을 참조하면 작동하지 않으며s.d.f
과 같은 열 참조도 작동하지 않습니다.
기본 예
집계의 가장 기본적인 용도는mean
및sd
과 같은 기본 함수를 포함합니다. 실제로 샘플 그룹의 평균 또는 다른 속성을 비교하는aggregate
의 가장 일반적인 용도 중 하나입니다.
최근에 엑셀 시트에서 계산을 재현했습니다. 대부분의 공식은 소계와 총계였습니다. 엑셀 시트는이 목적을 위해 매우 편안하게 구성되지 않았습니다:행,열 및 그 합계의 합계에 대한 합계가 사용되었습니다. 아르 자형,나는reshape2
패키지를 사용하고melt
를 사용하여 데이터를 스타 스키마 표현(모든 메타 데이터가 행 단위로 표현되고 모든 값이 자체 행을 얻는 경우)으로 변경 한 다음 다른 변수를 따라aggregate
을 사용하여 다른 합계를 얻습니다. by
에서 사용하는 변수가 적을수록 최종 결과가 더 많이 집계됩니다. 이 경우FUN
는 물론sum
였습니다.
집계 및 기본 함수의 편리한 사용 중 하나는 다양한 값의 출현 수를 얻는 것입니다:
기본 함수와 함께 집계를 가장 좋아하는 사용은 매월 마지막 날을 일련의 날짜로 얻는 것입니다. 이렇게 하려면 다음 코드를 사용할 수 있습니다.Date
):
이 달의 마지막 날 은행 휴일 뿐만 아니라 주말에 의존 하는 은행 정보 작업할 때 매우 편리 했다.
고급 사용
aggregate
의 고급 사용은 자신의function
을 작성하는 데 따라 다릅니다(예:FUN
매개 변수로 전달 된 익명 함수). 이를 위해
# do not run the syntaxaggregate(x = d.f, by = by.list, FUN = function(s.d.f){y <- s.d.f; return(y)}
구문을 사용할 수 있습니다.
다음은”복잡한”포트폴리오 위험 메트릭(다른 자산 클래스의 다른 거래 상대방에 대한 노출)이있는 예입니다.:
여기에aggregate()
기능을 사용합니다.
다음:범주별 관측치에 가우스 분포 맞추기:
아래에서는aggregate()
함수를 사용하여 범주별 평균 및 표준 편차를 찾습니다.
이 마지막 예는 몇 가지 흥미로운 속성을 보여줍니다. 첫째,data.frame
~aggregate
과by
변수 목록이 동일 할 필요는 없습니다. 이 게시물의 다른 장소에서 암시하는 동안,이 같은 설정의 명시 적 예입니다. 둘째,FUN
로 전달 된 함수는 익명 함수 일뿐만 아니라 둘 이상의 입력 매개 변수가있는 함수에서 카레됩니다. 2 입력 변수 함수fitdistr
에서 단일 입력 변수observations
의 함수가 작성되었습니다. 셋째,fitdistr
함수의 전체 반환 값을 반환하는 대신 반환 값은 반환 값에서estimate
요소로 제한됩니다. 마지막으로FUN
로 전달된 익명 함수의 반환 값은 하나만 있는 것이 아니라 두 개의 변수로 구성됩니다. 흥미롭게도 집계는 반환 값을list
에서matrix
로 캐스팅하고 요소의 이름을 지정합니다. 그러나 이러한 이름은 행렬의 열을 참조하는 데 사용할 수 없습니다. 그러나 다음과 같이 참조 할 수 있습니다:
distr.estimate$observation] 3.016988
닫는 단어
난 당신이 위의 유용한 발견 희망. 이제aggregate
에 대해 더 잘 알고 있으므로data.table
로 훨씬 더 많은 작업을 수행 할 수 있으며 훨씬 더 빠른 성능으로 수행 할 수 있습니다. 그러나data.table
는 복잡한 구문을 가지고 있으며,aggregate
은 간단하고 통찰력있는 반면,실제로 상황이 어떻게 작동하는지 이해해야합니다. 집계 논리와data.table
의 구문에 모두 익숙해 질 때까지 먼저aggregate
을 사용하여 코드를 작성한 다음data.table
를 사용하여 다시 작성하여 최적화하는 것이 좋습니다.
관심 있는 분들을 위해data.table
와 관련된 몇 가지 추가 사용 사례와 함께 위의 내용을 다시 작성하는 전용 게시물이 제공됩니다.