我正在用r(使用data.tables)开发一种算法,我需要将其中一列的值与上一行的值进行比较。
我已经尝试过移动/超前/滞后列,但它并不像我想象的那样
input_csv[, newCol:= ifelse(input_csv[, Col] > shift(newCol, 1L, type="shift") + tolerance * shift(newCol, 1L, type="shift")), input_csv[, Col], shift(newCol, 1L, type="shift"))]
我想要实现的目标看起来像
Col NewCol
116.1423 116.1423
116.1431 116.1423
116.1431 116.1423
116.1431 116.1423
123.0542 123.0542
123.0549 123.0542
input_csv <- structure(list(Col = c(116.1423, 116.1431, 116.1431, 116.1431,
123.0542, 123.0549), NewCol = c(116.1423, 116.1423, 116.1423,
116.1423, 123.0542, 123.0542)), class = "data.frame", row.names = c(NA, -6L))
if(例如,最后一行)123.0542>116.1423+116.1423*tolerance
。
tolerance <- as.double(0.00001)
没有data.table,我已经用下面的代码解决了它:
output[i] <- ifelse((as.double(input_csv[i, "Col"]) > as.double(output[i - 1]) + tolerance * output[i - 1]),
input_csv[i, "Col"],
output[i - 1])
input_csv$newCol<- output```