2016-10-31 2 views
2

하나의 행 (관찰)에 저장된 특정 값에 대한 연간 총계가있는 데이터 세트가 있습니다. R의 데이터를 깔끔하게 정리하여이 총 행이 매월 총 12 개 행의 12로 나누어지는 연간 총계를 저장하는 간단한 방정식 (총/12)을 사용하여 매월 분할되도록합니다. 나는 R에서 이것을하려고 노력하고있다. 그러나 매우 초보자이고, 어디에서 시작해야하는지에 관해 명확히하지 않고있다. 예는 다음과 같습니다 :합계 행을 개별 행으로 나누기 R

Date | Total 
 
2015 | 12,000 
 

 
Some R function to convert to: 
 

 
    Date | Total 
 
01-01-2015 | 1,000 
 
02-01-2015 | 1,000 
 
03-01-2015 | 1,000
여기

+0

테이블에 제대로 넣지 않은 것에 대해 사과드립니다 ... Newcomer to stackoverflow. – CGermain

+0

MySQL에 태그가 지정되었습니다. 데이터는 데이터베이스에서 파생됩니까? – Parfait

답변

0

내가 원하는 사용 사례입니다 추정 여러 년 예를 들어 데이터 세트입니다 : 다음

myData <- 
    data.frame(
    Date = 2011:2015 
    , Total = (1:5)*1200 
) 

, 나는 data.frame을 분할 Date 열 (이것은 연도가 고유 한 것으로 가정 함)에서 lapply으로 반복하여 원하는 월간 값으로 수정 한 다음에서 bind_rows과 함께 다시 꿰맬 수 있습니다(%>%)이 작동하려면 dplyr 또는 magrittr을로드해야합니다.

myData %>% 
    split(.$Date) %>% 
    lapply(function(x){ 
    temp <- data.frame(
     Date = as.Date(paste(x$Date 
          , formatC(1:12, width = 2, flag = "0") 
          , "01" 
          , sep = "-")) 
     , Total = x$Total/12 
    ) 
    }) %>% 
    bind_rows() 

이 코멘트에 제안, 당신은 달의 다른 수의 매년 분할해야

  Date Total 
1 2011-01-01 100 
2 2011-02-01 100 
3 2011-03-01 100 
... 
16 2012-04-01 200 
17 2012-05-01 200 
18 2012-06-01 200 
... 
29 2013-05-01 300 
30 2013-06-01 300 
31 2013-07-01 300 
... 
43 2014-07-01 400 
44 2014-08-01 400 
45 2014-09-01 400 
... 
58 2015-10-01 500 
59 2015-11-01 500 
60 2015-12-01 500 

경우 (생략 된 행을 표시하기 위해 ...를 사용하여, 메모를) 제공합니다, 나는를 만들 것 년 동안 지명 된 약수의 벡터. 여기에서는 n_distinctdplyr을 사용하고 일반 사례의 이름을 쉽게 지정하기 위해 magrittr 파이프를 사용하고 있습니다. 그런 다음, 추가/다른 연도의 항목 변경 : 위와 대신 12의, 그리고

toDivide <- 
    rep(12, n_distinct(myData$Date)) %>% 
    setNames(sort(unique(myData$Date))) 

toDivide["2016"] <- 9 

를,이 벡터를 사용할 수 있습니다. 이 더불어 lapply 루프 내

Total = x$Total/12 

을 :

Total = x$Total/toDivide[as.character(x$Date)] 

을하고 대신 항상 똑같은로 나누어으로, 그 해에 대한 항목으로 분할한다 그래서,이를 교체합니다.

+0

Mark 대단히 감사합니다! 나는 이것을 시도해보고 어떻게 작동하는지 알려 줄 것이다. – CGermain

+0

마크,이게 잘 작동했습니다. 추가 차원으로 그룹화해야하는 합계가 모두있는 여러 행이있을 때 그룹 by 절을 추가했습니다. 나는 추가 질문을했다. 저는 2015를 12로 나누고 2016을 9로 나눌 필요가 있습니다 (9 월까지). 만약 Date = 2016이고 9로 나누면 "if"문을 어디에 써야할까요? – CGermain

+0

그것은 당신을 위해 일한 것을 기쁘게 생각합니다. 필요한 것을 위해 필요한 예제를 편집하십시오. –