1

我试图找到 nrows(df) 的最大行数 2:5、3:6、4:7 等等。然而,我在思考如何做到这一点时遇到了问题,因为我过去从未成功使用过 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")))

具体来说,我想在第 2 到第 5 行的 AD1$high 列上应用 max 函数,然后在第 3 到第 6 行等等,并将它放在一个新列中。

谢谢你

4

2 回答 2

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 初始化为适当的长度并填充其值来更有效地执行此操作而无需循环。

于 2013-05-30T13:31:58.897 回答
2

使用动物园功能“rollapply”解决了我的问题。

于 2013-05-30T19:30:37.857 回答