R - 使用两列减去前一行

R - subtraction of previous rows using two columns

我正在尝试进行一种滚动减法,但使用两列。我想为每一行执行 (DistTravelValue - distBWStops),从序列中的最后一站开始。

我已经开始按降序排列我的标题。我添加了一个列,DistTravelValue,它查找停靠点是否为最大停靠点(我在上一步中确定),输入 shape_dist,否则为 0.

然后我想用它的 distBWStops 值减去前一行的 DistTravelValue 以找到每一行的 DistTravelValue。我觉得这可能需要 purrr,但我完全不知道如何进行。

示例数据:

trip_id seq shape_dist direction_id distBWStops MaxStop DistTravelValue
2139296 56     14.3937 0            0.255       56      14.3937
2139296 55     14.1387 0            0.2582      56      0
2139296 54     13.8805 0            0.6186      56      0
2139296 53     13.2619 0            0.1856      56      0
2139296 52     13.0763 0            0.165       56      0
2139296 51     12.9113 0            0.1326      56      0

期望的输出:

trip_id seq shape_dist direction_id distBWStops MaxStop DistTravelValue
2139296 56     14.3937 0            0.255       56      14.3937
2139296 55     14.1387 0            0.2582      56      14.1355
2139296 54     13.8805 0            0.6186      56      13.5169
2139296 53     13.2619 0            0.1856      56      13.3313
2139296 52     13.0763 0            0.165       56      13.1663
2139296 51     12.9113 0            0.1326      56      13.0337

我的新手尝试:

tripsJoined6 <- inner_join(tripsJoined5, maxStopSequence) %>%
  arrange(trip_id,
          direction_id,
          desc(seq)) %>%
  group_by(trip_id, direction_id) %>%
  mutate(DistTravelValue = ifelse(seq == MaxStop, shape_dist, 0)) %>%
  mutate(
    DistTravelValue = ifelse(
      DistTravelValue > 0,
      DistTravelValue,
      DistTravelValue[i + 1] - distBWStops[i + 1]
    )
  )

DistTravelValue[i + 1] - distBWStops[i + 1] 不起作用。

提前致谢!

省略排序和分组最后mutate可以写成:

trips %>%
  mutate(DistTravelValue = cumsum(c(first(DistTravelValue), -distBWStops[-1])))

给予:

  trip_id seq shape_dist direction_id distBWStops MaxStop DistTravelValue
1 2139296  56    14.3937            0      0.2550      56         14.3937
2 2139296  55    14.1387            0      0.2582      56         14.1355
3 2139296  54    13.8805            0      0.6186      56         13.5169
4 2139296  53    13.2619            0      0.1856      56         13.3313
5 2139296  52    13.0763            0      0.1650      56         13.1663
6 2139296  51    12.9113            0      0.1326      56         13.0337

备注

我们将其用作trips

trips <- 
structure(list(trip_id = c(2139296L, 2139296L, 2139296L, 2139296L, 
2139296L, 2139296L), seq = 56:51, shape_dist = c(14.3937, 14.1387, 
13.8805, 13.2619, 13.0763, 12.9113), direction_id = c(0L, 0L, 
0L, 0L, 0L, 0L), distBWStops = c(0.255, 0.2582, 0.6186, 0.1856, 
0.165, 0.1326), MaxStop = c(56L, 56L, 56L, 56L, 56L, 56L), 
DistTravelValue = c(14.3937, 
0, 0, 0, 0, 0)), class = "data.frame", row.names = c(NA, -6L))