我有两个向量,subject
和 target
。我想根据两个现有向量之间的比较创建一个新向量,比较元素 lagged
。我已经使用下面的循环解决了这个问题,但我本质上想知道是否有使用 apply
的更优雅的解决方案?
subject <- c(200, 195, 190, 185, 185, 185, 188, 189, 195, 200, 210, 210)
target <- c(subject[1], subject[1]-cumsum(rep(perweek, length(subject)-1)))
adjtarget <- target
for (i in 1:(length(subject)-1)) {
if (subject[i] > adjtarget[i]) {
adjtarget[i+1] <- adjtarget[i]
} else {
adjtarget[i+1] <- adjtarget[i]-perweek }
}
}
最佳答案
这并不能完全解决您的问题,但可能会指明一个有用的方向。我忽略了更改 adjtarget
和与其进行比较之间的相互作用,并展示了一个类似的问题,我们在其中与常量 target
进行比较。然后可以将循环中的 if
更改为向量比较:
lv <- but.last(subject) > but.last(target)
ind <- which(lv)
准备结果向量(我称它为 x
,因为它与你的 adjtarget
的结果不同)作为 的移位副本目标
并将更改分配给它:
x <- c(target[1], but.last(target)) # corresponds to the true branch of the `if`
x[ind+1] <- target[ind] - perweek # corresponds to the false branch
或者,
x <- c(target[1], but.last(target) - (!lv)*perweek
正如我所说,这并不能解决您的问题,但也许我们可以从这里开始。
关于r - 基于比较其他两个向量 "lagged"的元素的新向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395206/