집계-연구의 데이터 프레임에 대한 강력한 도구

이 게시물은 데이터에 사용되는 집계 함수에 대한 간단한 검토를 제공합니다.프레임 및 몇 가지 흥미로운 용도를 제공합니다:사소한하지만 편리한에서 내가 집계로 해결 한 가장 복잡한 문제에.

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과 같은 열 참조도 작동하지 않습니다.

기본 예

집계의 가장 기본적인 용도는meansd과 같은 기본 함수를 포함합니다. 실제로 샘플 그룹의 평균 또는 다른 속성을 비교하는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~aggregateby변수 목록이 동일 할 필요는 없습니다. 이 게시물의 다른 장소에서 암시하는 동안,이 같은 설정의 명시 적 예입니다. 둘째,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와 관련된 몇 가지 추가 사용 사례와 함께 위의 내용을 다시 작성하는 전용 게시물이 제공됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다.