计算去年观测值的最大值
Calculate maximum of last year observations
我正在努力从去年的观察(不是每年!)中获取变量的最大值并将其实现到每一行(观察)。
我认为最好的方法是使用 rollapply 函数,但我无法弄清楚宽度应该是什么样子,因为它可能因每次观察而异(每次观察代表一天,但并非所有天都有观察)。我知道使用 list 会产生偏移值,所以这些值看起来如何?
我得到的代码:
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
高于阈值时,不显示 variable
值 - 显示 TRUE
或 FALSE
(或 1
/ 0
)。
没有进一步的细节很难回答。但看看这是否是您需要的:
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
我正在努力从去年的观察(不是每年!)中获取变量的最大值并将其实现到每一行(观察)。
我认为最好的方法是使用 rollapply 函数,但我无法弄清楚宽度应该是什么样子,因为它可能因每次观察而异(每次观察代表一天,但并非所有天都有观察)。我知道使用 list 会产生偏移值,所以这些值看起来如何?
我得到的代码:
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
高于阈值时,不显示 variable
值 - 显示 TRUE
或 FALSE
(或 1
/ 0
)。
没有进一步的细节很难回答。但看看这是否是您需要的:
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