【发布时间】:2018-03-05 04:34:50
【问题描述】:
我的数据如下所示:
date schedule_id food_truck_id building_id truck_status last_confirmed_date dsle
2018-04-26 422 58 30 accepted_event 0 31
2018-04-26 422 59 30 accepted_event 2018-02-27 11
2018-04-26 422 65 30 accepted_event 2018-03-15 12
2018-04-26 422 88 30 accepted_event 2018-02-20 7
2018-04-26 422 89 30 accepted_event 2018-03-22 13
2018-04-26 422 101 30 accepted_event 2018-02-06 16
2018-04-26 422 120 30 accepted_event 2018-03-06 14
2018-04-26 422 135 30 accepted_event 2018-03-13 21
2018-04-26 399 42 33 accepted_event 2018-03-15 8
2018-04-26 399 58 33 accepted_event 0 31
2018-04-26 399 59 33 accepted_event 2018-03-01 11
2018-04-26 399 65 33 accepted_event 2018-02-27 12
2018-04-26 399 88 33 accepted_event
可以使用以下方法复制:
structure(list(date = structure(c(17647, 17647, 17647, 17647,
17647, 17647, 17647, 17647, 17647, 17647, 17647, 17647, 17647,
17647, 17647, 17647, 17647), class = "Date"), schedule_id = c(422L,
422L, 422L, 422L, 422L, 422L, 422L, 422L, 399L, 399L, 399L, 399L,
399L, 399L, 399L, 399L, 399L), food_truck_id = c(58L, 59L, 65L,
88L, 89L, 101L, 120L, 135L, 42L, 58L, 59L, 65L, 88L, 89L, 101L,
120L, 135L), building_id = c(30L, 30L, 30L, 30L, 30L, 30L, 30L,
30L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L), truck_status = c("accepted_event",
"accepted_event", "accepted_event", "accepted_event", "accepted_event",
"accepted_event", "accepted_event", "accepted_event", "accepted_event",
"accepted_event", "accepted_event", "accepted_event", "accepted_event",
"accepted_event", "accepted_event", "accepted_event", "accepted_event"
), last_confirmed_date = c("0", "2018-02-27", "2018-03-15", "2018-02-20",
"2018-03-22", "2018-02-06", "2018-03-06", "2018-03-13", "2018-03-15",
"0", "2018-03-01", "2018-02-27", "0", "2018-03-06", "2018-03-13",
"0", "2018-02-22"), dsle = c(31, 11, 12, 7, 13, 16, 14, 21, 8,
31, 11, 12, 7, 13, 16, 14, 21)), .Names = c("date", "schedule_id",
"food_truck_id", "building_id", "truck_status", "last_confirmed_date",
"dsle"), row.names = c(142L, 223L, 379L, 455L, 495L, 589L, 806L,
877L, 63L, 155L, 215L, 287L, 452L, 483L, 667L, 809L, 894L), class = "data.frame")
我的目标是仅根据 max(dsle) 选择 food_truck_id,但每个日期应该是唯一的。比如schedule_id 422,food_truck_id max(dsle) 是58,schedule_id 399 也是58。
我想要的是,假设 422 是 58,但对于 399,它应该是 58 以外的下一个 max(dsle)。
我尝试了以下方法,但它没有给出我想要的。
testxx %>%
group_by(schedule_id) %>%
distinct(food_truck_id, date, dsle) %>%
filter(dsle == max(dsle))
我想要的结果如下
date schedule_id food_truck_id
2018-04-26 422 58
2018-04-26 399 135
因为 58 旁边的 135 有 max(dsle)
【问题讨论】:
-
对于
schedule_id399,是您返回food_truck_id= 135 的原因,因为您已经为其他计划返回了food_truck_id58,因此您不能返回相同的@ 987654328@两次? -
@SymbolixAU 没错。这就是为什么我每天都提到独特的 food_truck_id。也因为 135 是 58 之后的第二个 max(dsle)
-
@alistaire 卡车应按 schedule_id 分组,因为每个 schedule_id 在同一天(日期)必须具有唯一的卡车 ID
-
好的,所以您希望将重复的最大值设置为它们所属的组,以使最大值的总和最大化?这并不容易。
-
@mt1022 这意味着整个 schedule_id 已经消失了。
标签: r dplyr data.table plyr