Выполнение расчета между строками (наблюдениями) в вашем фрейме данных - PullRequest
1 голос
/ 07 октября 2019

Скажем, у меня есть такой фрейм данных:

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 или мне нужна какая-то форма цикла? Любая помощь приветствуется!

1 Ответ

1 голос
/ 07 октября 2019

Вы можете достичь этого, используя data.table, а также -

setDT(data)
data[,hypotenuse:=sqrt((lead(yaw)-yaw)*2 + (lead(yaw)-yaw)*2)]
data[,lane_deviation:=sin(yaw) * hypotenuse]

Как уже упоминалось в комментариях @David, мы можем использовать lead function

И используя dplyr

newdata <- data %>%
    mutate(Yaw = lead(yaw)-yaw) %>%
    mutate(hypotenuse = sqrt((lead(yaw)-yaw)^2 + (lead(yaw)-yaw)^2)) %>%
               mutate(lane_deviation = sin(Yaw) * hypotenuse)
...