【发布时间】:2019-10-07 12:53:33
【问题描述】:
假设我有一个这样的数据框:
data = structure(list(yaw = c(1, 1, 2, 3, 5), z = c(1, 2, 3, 4, 5),
x = c(1, 3, 2, 2, 3)), row.names = c(NA, 5L), class = "data.frame")
我想在每一行(观察)和它之前的行之间执行计算,然后将其保存为数据框中的新列(或者保存为新数据集?例如:
newdata <- data %>%
mutate(Yaw = Row2Yaw - Row1Yaw) %>%
mutate(hypotenuse = sqrt((Row2X - Row1X)^2 + (Row2Z - Row1Z)^2) %>%
mutate(lane_deviation = sin(Yaw) * hypotenuse)
因此,这为我提供了这两行之间差异的 lane_deviation 值。理想情况下,我想为每个观察计算这个(即 Row3Yaw - Row2Yaw)等......)
这在 dplyr 中是否可行,还是我需要某种形式的循环?任何帮助表示赞赏!
【问题讨论】:
-
只需使用
lag或lead,您的代码应该可以正常工作。或者只使用diff- 这应该更容易 -
例如
Yaw就是diff(data$yaw)。hypotenuse就是sqrt(diff(data$x)^2 + diff(data$z)^2)等等。 -
@DavidArenburg 为了计算差异,然后将其添加到先前的值,即计算 Row2 和 Row1 之间的车道偏差,然后计算 Row3 和 Row2 之间的偏差并将其添加到以前的值等等...?