【发布时间】:2021-05-14 05:06:36
【问题描述】:
我需要在group_by 和summarise 之后保留行顺序。
这是初始数据集:
movmnt_id <- c("101", "101", "351", "601","601","351")
plant <- c("F5P", "F5D", "F5P", "F5D","F5D", "RUP")
loc <- c("CB00", "CB00", "CB00", "CB00","CB00","MOS1")
qty <- c(100, 100,100,10,90,88)
date <- c("2018-01-05","2018-01-05","2018-01-05","2018-01-11","2018-01-11","2018-01-22" )
time <- c("10:38:38","10:47:17", "10:47:09","17:20:31","17:20:24","12:00:54" )
df <- data.frame(movmnt_id, plant, loc, qty,date, time)
df
movmnt_id plant loc qty date time
1 101 F5P CB00 100 2018-01-05 10:38:38
2 101 F5D CB00 100 2018-01-05 10:47:17
3 351 F5P CB00 100 2018-01-05 10:47:09
4 601 F5D CB00 10 2018-01-11 17:20:31
5 601 F5D CB00 90 2018-01-11 17:20:24
6 351 RUP MOS1 88 2018-01-22 12:00:54
我需要先根据具体条件下单(这里的数据集和条件都大大简化了)。我是这样做的:
df2 <- df %>%
dplyr::group_by( movmnt_id, plant, loc,date,time) %>%
dplyr::summarise(total_qty = sum(qty)) %>%
dplyr::arrange( date,time) %>%
dplyr::ungroup()
df2
movmnt_id plant loc date time total_qty
<fct> <fct> <fct> <fct> <fct> <dbl>
1 101 F5P CB00 2018-01-05 10:38:38 100
2 351 F5P CB00 2018-01-05 10:47:09 100
3 101 F5D CB00 2018-01-05 10:47:17 100
4 601 F5D CB00 2018-01-11 17:20:24 90
5 601 F5D CB00 2018-01-11 17:20:31 10
6 351 RUP MOS1 2018-01-22 12:00:54 88
这个结果没问题。然后我需要按数量删除timestamp 和summarise。
我的最后一次尝试是这样的:
df3 <- df2 %>%
dplyr::group_by( movmnt_id, plant, loc,date) %>%
dplyr::summarise(total_qty = sum(total_qty)) %>%
dplyr::ungroup()
df3
movmnt_id plant loc date total_qty
<fct> <fct> <fct> <fct> <dbl>
1 101 F5D CB00 2018-01-05 100
2 101 F5P CB00 2018-01-05 100
3 351 F5P CB00 2018-01-05 100
4 351 RUP MOS1 2018-01-22 88
5 601 F5D CB00 2018-01-11 100
这不行 - 我失去了之前的订单。
我需要的是movmnt_id = 601 的一行,并且与 df2 中的顺序相同,movmnt_id = 351 日期为 2018-01-05 应该在同一日期的动作 101 之间:
movmnt_id plant loc date time total_qty
<fct> <fct> <fct> <fct> <fct> <dbl>
1 101 F5P CB00 2018-01-05 10:38:38 100
2 351 F5P CB00 2018-01-05 10:47:09 100
3 101 F5D CB00 2018-01-05 10:47:17 100
4 601 F5D CB00 2018-01-11 17:20:24 100
5 351 RUP MOS1 2018-01-22 12:00:54 88
基本上,如果分组条件中的所有值都相同,除了 qty - 这些行可以相加,但如果不是 - 必须保持顺序。
我该怎么做?
【问题讨论】:
-
不,这还不够,它不适用于所有情况。重要的是先按时间戳排列。
-
行排序与数据无关,除非您有时间序列。否则,聚合数据集将具有无保证的排序,并且仍将保持所需的属性。