R 如何根据数据帧中的某些规则移动最大值?

R 如何根据数据帧中的某些规则移动最大值?,r,R,y就像 正常价格天数 114990 0.16149463 0 214989 1.69519358 0 3149881.57821998 0 414987 0.47614311 0 514986 0.87016180 0 614985 2.55679229 0 714984 0.89753533 0 我想要的输出: 在y后面附加另一列,其值为最近2周的最大价格。 因此,如果当前行是今天,则获取过去14天(包括今天)的最高价格(如果是最后2周) 是正常的一周,如果最后两周中有一周不是正常的一周,那么

y就像
正常价格天数
114990 0.16149463 0
214989 1.69519358 0
3149881.57821998 0
414987 0.47614311 0
514986 0.87016180 0
614985 2.55679229 0
714984 0.89753533 0

我想要的输出: 在y后面附加另一列,其值为最近2周的最大价格。 因此,如果当前行是今天,则获取过去14天(包括今天)的最高价格(如果是最后2周) 是正常的一周,如果最后两周中有一周不是正常的一周,那么我需要进一步返回以找到最大值 价格,因为我需要过去两周的最高价格。我该怎么做?或者我必须使用loop/if来完成

顺便说一句,为什么在cbind(天数、价格、常规)之后的天数是149914989?在cbind之前,日子就像
“2010~1223”格式。< /P> < P>假定一天是正则的,如果正则=1,对于每行i,我们考虑行1到i,如果不存在行,或者返回最后14个最大的,则删除非正则行并返回NA。< /P>
> days=Sys.Date()-1:70
> price=abs(rnorm(70))
> regular=rep(c(0,0,0,0,1,0,1,0,0,1),c(7,7,7,7,7,7,7,7,7,7))
> y=data.frame(cbind(days,price,regular))

y
days
转换为数值,因为
cbind
的任何参数都不是
data.frame
,因此
cbind
返回一个矩阵
data.frame(cbind(…)
无论如何都是多余的。你知道是什么让一周变得规律吗?这可以提供一个更容易、更雄辩的解决方案。此外,您还可以将数据帧创建包装为一行:
y谢谢,y[1:3,,drop=FALSE]的含义是什么?这是什么意思?你说得对。它不是真的需要(虽然它不痛)。如果y只有一列,那么如果未指定drop=FALSE,y[1:i,]将减少为向量(而不是数据帧)。这里y有不止一列,所以我们并不需要它,但我习惯性地添加它,因为省略它通常是R中编程错误的来源。我将删除它。
y <- data.frame(days, price, regular)
y$max <- sapply(1:nrow(y), function(i) with(subset(y[1:i, ], regular == 1), 
        if (length(regular) == 0) NA else max(tail(price, 14))))