2017-10-21 7 views
0

전년도 관측치의 변수를 최대 값으로 얻고 (각 연도가 아닌!) 각 행 (관측치)에이를 구현하는 데 어려움을 겪고 있습니다.전년도 관측치의 최대치를 계산하십시오.

나는 이렇게하는 가장 좋은 방법은 rollapply 함수를 사용하는 것이지만 각 관찰마다 달라질 수 있으므로 너비가 어떻게 보이는지 알아낼 수 없다고 생각합니다 (각 관찰은 하루를 나타내지 만 모든 날에는 관찰이 없음). 목록을 사용하면 오프셋 값이 만들어 지므로이 값이 어떻게 생겼는지 알 수 있습니까?

내가 가진 코드 : 행이 31/8/2016의 날짜가 : 명확히하기 위해

mutate(data,"Feature"=rollapplyr(variable,list(0,"Go back one year"),max,fill=NA)) 

예. 새 열 (dplyr 패키지의 mutate 사용)에서이 행에 최대 값 을 2011 년 3 월 31 일에서 2013 년 8 월 31 일 (이 행)까지 표시하려고합니다. 더 나아가 싶은 분들을 위해

: 대신 variable 값을 표시 - 최대 계산하면 디스플레이 TRUE 또는 FALSE (또는 1/0는) variable는 임계 값 이상입니다.

+1

그것은 당신이 [최소 완료 제공하는 경우 당신은 좋은 대답을 얻을 것이다 더 가능성이 당신이 필요하지만 만약 참조 재현 가능한 예제] (http://stackoverflow.com/help/mcve)를 참조하십시오. 우리가 일하고 질문에 대답하는 방법을 보여주기 위해 사용할 수있는 어떤 것. 이것은 또한 귀하의 질의 응답이 앞으로 다른 사람들에게 더욱 유용하게됩니다. –

답변

1

자세한 내용없이 대답하기가 어렵습니다.

data=data.frame(Data=seq.Date(as.Date("2001-01-01"),as.Date("2005-12-31"),by = "month"),Var=sample(1:1000,60,TRUE)) 
#exclude some lines 
data=data[-c(10,15,17:21),] 


# using for 
    for (i in 1:nrow(data)){ # i=1 
     data$Max[i]=max(data[data$Data>(data$Data[i]-360) & data$Data<=data$Data[i],"Var"]) 
    } 


# using rollapply 
# one year interval from dates 
    for (i in 1:nrow(data)){ # i=1 
     data$Oneyear[i]=length(data$Data[data$Data>(data$Data[i]-360) & data$Data<=data$Data[i]]) 
    } 

data$Maxr=rollapplyr(data$Var, data$Oneyear, max) 

당신이 얻을 것이다

set.seed(123) 

사용 :

> tail(data) 
     Data Var Oneyear Max Maxr 
55 2005-07-01 561  12 858 858 
56 2005-08-01 207  12 858 858 
57 2005-09-01 128  12 858 858 
58 2005-10-01 754  12 858 858 
59 2005-11-01 896  12 896 896 
60 2005-12-01 375  12 896 896 
+0

@ 로버트 감사합니다! 매우 도움이되었다! 나는 360 일을 일년으로 보았다. 관측 날짜에 따라 완전한 연도로 이것을 교환 할 수 있습니까? (전체 연도는 날짜의 1에서 1을 뺀 날짜를 의미합니다.) –

+0

예,'(data $ Data [i] -360) 대신'as.Date (paste (as. 데이터 (data $ Data [i], "% m- % d"), sep = "-")) – Robert