2014-10-30 4 views
0

data.table의 요약 통계를 생성하고 날짜 열의 월 및 연도로 집계하려고합니다.월 단위로 집계하고 날짜를 유형으로 유지하십시오.

> head(monthly) 
     betnr persnr idnum frau gebjahr te_med  month tentgelt status 
1: 50536344 62181514 40442 1 1960 76.52142 1993-12-01 0.5777598 fire 
2: 50536344 62744472 40442 0 1963 76.52142 1993-08-01 0.5777598 fire 
3: 50536344 63071749 40442 0 1947 76.52142 1993-12-01 0.5777598 fire 
4: 50536344 63385685 40442 1 1946 76.52142 1993-07-01 0.5777598 fire 
5: 50536344 63918388 40442 0 1952 76.52142 1993-12-01 0.5777598 fire 
6: 50536344 61961225 40442 0 1980 71.90094 1994-12-01 23.1001672 fire 

내 통계를 만들려면, 그때

statistics2 <- monthly[, list(NOBS = .N, MWAGE=mean(tentgelt)), by=list(status, month=format(month, '%m-%Y'))] 

이 정확한 통계를 만들고 실행하지만, month 열이 이제 문자열을 포함합니다 : 여기로 시작하는거야. 나는 항상 01 할 일을 고정하여 날짜 형식을 변경하려고 :

나에게 원하는 출력 제공
x <-apply(statistics2, 1, function(x) paste('01-',x['month'], sep='')) 
statistics2[, month:= as.Date(x, '%d-%m-%Y')] 

:

> head(statistics2) 
    status  month NOBS  MWAGE 
1: hire 1993-01-01 37914 0.5820961 
2: normal 1993-01-01 790 0.5787695 
3: hire 1994-01-01 6471 15.1267445 
4: normal 1994-01-01 23931 22.8101928 
5: hire 1993-02-01 435 0.5946736 
6: normal 1993-02-01 38661 0.5820226 

그러나, 내 모든 접근 방식은 조금 cloddy 느낌을. 원하는 출력을 얻는 더 깨끗한 방법이 있습니까?

+0

주를 그 달 년이 _not_ 날짜이고, R은로 해석하고 싶지 않은 아마도 그 이유는. 그러나 특별한 Year-Month 종류의 클래스가있는 패키지가 있습니다 (지금은 기억이 안납니다). –

답변

2

네, 더 간단하게 만들고 모든 것을 한 번에 할 수 있습니다. 그냥

statistics2 <- monthly[, list(NOBS = .N, 
         MWAGE = mean(tentgelt)), 
         by = list(status, month = as.Date(format(month, '%Y-%m-01')))] 
statistics2 
# status  month NOBS  MWAGE 
# 1: fire 1993-12-01 3 0.5777598 
# 2: fire 1993-08-01 1 0.5777598 
# 3: fire 1993-07-01 1 0.5777598 
# 4: fire 1994-12-01 1 23.1001672 

일부 측면 노트 집계 과정에서 Date 클래스에 전체 변환을 그의 주석에서 언급 @beginner으로

  • , 아니 "년 - 월"날짜 없다 R을 입력하십시오.이 부분을 참조하십시오. r-faq
  • apply 방법은 data.table. 당신은 수행하여 단순히 당신의 마지막 단계를 수행 할 수 있습니다 :

    statistics2[, month := as.Date(paste0("01-", month), "%d-%m-%Y")] 
    
관련 문제