2017-10-21 10 views
0

私は、昨年の観測値から変数の最大値を得ることは苦労しています(毎年ではありません!)。昨年の観測値の最大値を計算する

私は、rollapply関数を使用していますが、幅がどのように見えるかはわかりません(各観測は1日を表しますが、すべての日に観測値があるわけではありません)。リストを使用するとオフセット値が生成されるので、これらの値はどのように見えるのでしょうか?

Iが得コード:明確にするために

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

例:行が31/8/2016の日付を有します。私は新しい列(dplyrパッケージのmutateを使用)にこの行に最大値variableを31/8/2015から31/8/2016(この行)まで表示するようにします。さらに行きたい人のために

: 代わり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 (data $ Data [i]、 "%m-%d")、sep = " - ")) ' – Robert

関連する問題