我试图找到最大行2:5,然后是3:6,然后是4:7,依此类推nrow(df)。然而,我在思考如何做到这一点时遇到了问题,因为我过去从未成功使用for循环。非常感谢任何帮助。
structure(c(76.89, 77.08, 77.05, 77.28, 77.28, 77.61, 77.03,
77.61, 77.28, 77.3, 77.37, 77.61, 76.7, 77, 76.98, 77.09, 77.21,
77.5, 76.74, 77.49, 76.98, 77.2, 77.29, 77.58, NA, 76.91, 77.27,
77.13, 77.24, 77.45, NA, 0.910154726303475, 0.0129416332341208,
0.220407104887854, 0.168306576903153, 0.20658489347966, NA, 0.117019893381879,
-0.3753073637893, -0.0518604952677195, -0.0388399792853642, 0.0645577792123914
), .indexCLASS = "Date", .indexTZ = "UTC", tclass = "Date", tzone = "UTC", class = c("xts",
"zoo"), index = structure(c(631324800, 631411200, 631497600,
631756800, 631843200, 631929600), tzone = "UTC", tclass = "Date"), .Dim = 6:7, .Dimnames = list(
NULL, c("open", "high", "low", "close", "avgco", "percenthigh",
"percentlow")))
具体来说,我想在AD1 $ high列上应用max函数,用于第2行到第5行,然后是第3行到第6行,依此类推,并将其放在新列中。
谢谢
答案 0 :(得分:2)
你可以通过制作你的列的三个副本(即“高”)并使它们偏移来实现它,这样一个值从一个值开始,一个值从一个值开始。然后只需在迭代它们时取最大值:
y <- yourdata
t <- y[,"high"]
tback <- t[2:length(t)]
tforward <- append(NA,t)
for(i in 1:length(t)) {
maxvals[i] <- max(c(t[i],tback[i],tforward[i]), na.rm=T)
}
> maxvals
[1] 77.61 77.61 77.61 77.37 77.61 77.61
或者你可以通过将maxvals初始化为适当的长度并填充其值来更有效地完成它。
答案 1 :(得分:2)
使用zoo函数“rollapply”解决了我的问题。