2013-12-09 3 views
2

날짜 열 (여러 레코드가있는 일부 날짜)과 숫자 열이있는 프레임이 있습니다. 레코드 당 하나의 날짜, 각 날짜의 숫자 합계 및 각 날짜의 레코드 발생 수를 나열하는 프레임이 필요합니다.고유 날짜를 기반으로 한 계산 기록

시작 프레임 : 나는 다음과 같이 고유 한 날짜 당 SomeNum의 합계를 얻을 수 있습니다

SomeDate SomeNum 
10/1/2013 2 
10/1/2013 3 
10/2/2013 5 
10/3/2013 4 
10/3/2013 1 
10/3/2013 1 

:

newDF<-unique(within(df, { 
    SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum) 
})) 

하지만 수의 수를 얻는 방법을 알아낼 수 없습니다 각각의 고유 한 SomeDate가 발생합니다.

내가 원하는 :

SomeDate SumOfSomeNums CountOfSomeDate 
10/1/2013 5    2 
10/2/2013 5    1 
10/3/2013 6    3 

나에게 CountOfSomeDate 데이터를 어떻게 얻을 것인가? 들으

답변

2

당신의 접근 방식으로 계속, 당신의 집계 함수로 length를 사용


unique(within(mydf, { 
    SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum) 
    CountOfSomeDate <- ave(SomeDate, SomeDate, FUN = length) 
    rm(SomeNum) 
})) 
# SomeDate CountOfSomeDate SumOfSomeNums 
# 1 10/1/2013    2    5 
# 3 10/2/2013    1    5 
# 4 10/3/2013    3    6 
그러나, 여기에서 얻을 수있는 많은 다른 방법이있다.

do.call(data.frame, aggregate(SomeNum ~ SomeDate, mydf, function(x) c(sum(x), length(x)))) 
# SomeDate SomeNum.1 SomeNum.2 
# 1 10/1/2013   5   2 
# 2 10/2/2013   5   1 
# 3 10/3/2013   6   3 

그리고 data.table 방법 :

은 여기 aggregate 방법입니다!

library(data.table) 
DT <- data.table(mydf) 

DT[, list(Count = length(SomeNum), Sum = sum(SomeNum)), by = SomeDate] 
#  SomeDate Count Sum 
# 1: 10/1/2013  2 5 
# 2: 10/2/2013  1 5 
# 3: 10/3/2013  3 6 
+0

** 감사합니다 ** 위대한 작품! 나는 다른 옵션들과 함께 플레이 할 것이다. 앞으로 추가 열을 추가 할 예정이므로 진행할 때 옵션이 내 요구 사항을 충족시키는 데 도움이 될 수 있습니다. – BigKage

+1

@ BigKage, 문제가 없습니다. 나는 당신이'data.table' 구문을 매우 쉽게 찾을 수있을 것이라고 생각합니다. 그리고 그것은 큰 데이터 세트에서 훌륭합니다. – A5C1D2H2I1M1N2O1R2T1

관련 문제