2012-04-17 3 views
1

다른 항목의 해당 항목이 동일한 항목이있는 항목의 평균을 취하는 방법은 무엇입니까?R 표 수정

예를 들어 나는 3 열, 시간 및 가격이 2 인 대형 테이블을 가지고 있으며 시간 열 아래에서 값이 반복된다고 말할 수 있습니다. 10:30처럼 4 번 나타나면 해당 가격 열 항목의 평균을 취하여 단일 가격으로 10:30의 단일 행으로 요약해야합니다. 누군가 나에게 통찰력을 제공 할 수 있습니까?

샘플 데이터 :

time  prices  size 
10:00  23  1 
10:15  12  3 
10:30  12  1 
10:30  19  4 
10:45  12  1 

나는 가격을 평균 하나의 행에 병합 행 3과 4를 수정하고 싶습니다. 더 완전한 그림에 대한

tapply(prices, time, mean) 

같은 대한 방법을 참조

답변

3

?tapply

하지만 열 size와 함께 무엇을 하시겠습니까?

편집 :

myDF<-data.frame(time=c("10:00","10:15","10:30","10:30","10:45"), 
    prices=c(23,12,12,19,12),size=c(1,3,1,4,1)) 

theRows <- tapply(seq_len(nrow(myDF)), myDF$time, function(x) { 
    return(data.frame(time = head(myDF[x, "time"],1), prices = mean(myDF[x, "prices"]), 
    size = tail(myDF[x, "size"], 1))) 
    } 
) 

Reduce(function(...) rbind(..., deparse.level = FALSE), theRows) 

추신 :

여기에 한 가지 제안의 가격의 평균 크기의 마지막 값을하려면 ddply을 사용하면이 작업을 매우 잘 수행 할 수 있습니다. Paul의 답변도 참조하십시오!

+0

감사합니다. 크기 열에 대해서는 매우 유용합니다. 마지막 항목을 고려해보고 싶습니다.이 경우 4를 유지하고 싶습니다. 그것이 모든 사람들을 위해 어떻게 작동해야하는지. – Probabilityman

3

plyr 패키지를 살펴볼 수도 있습니다. 나는 이것에 대한 ddply을 사용 :

ddply(df, .(time), summarise, 
    mean_price = mean(prices), 
    sum_size = sum(size)) 

데이타가 df에 있다고 가정합니다. plyr에 대한 더 자세한 설명은 Journal of Statistical Software의 this paper을 참조하십시오.

다른 대안으로는 data.table 또는 ave을 사용할 수 있습니다.

+0

고마워요. 나는 ddply의 기능을 따르지 않는다. 크기 열의 내용을 더하고 싶다면 다양한 열에서 같은 시간을 가진 항목의 가격 열을 평균하면 어떨까요? – Probabilityman

+0

필자는 size 컬럼의 합계를 포함하도록 코드를 확장했으며, plyr을 아주 잘 설명하는 문서에 대한 참조를 추가했다. –

+0

대단히 고맙습니다. @Paul Hiemstra – Probabilityman