gpt4 book ai didi

r - 组织数据框 - 将一列分成三列

转载 作者:行者123 更新时间:2023-12-05 00:10:59 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据集:

Ord_ID      Supplier     Trans_Type     Date
1 A PO 2/3/18
1 A Receipt 2/15/18
2 B PO 2/4/18
2 B Receipt 3/13/18
3 C PO 2/7/18
3 C Receipt 3/1/18
3 C Receipt 3/5/18
3 C Receipt 3/29/18
4 B PO 2/9/18
4 B Receipt 2/20/18
4 B Receipt 2/27/18
5 D PO 2/18/18
5 D Receipt 4/2/18

基本上,我需要将 Date 列分成 3 个不同的列。我需要一个 PO_Date 列,该列列出每个订单的最早收货日期和每个订单的最后收货日期。因为有些订单只有一个收货日期,所以第2列和第3列应该是一样的。我试过使用 spread() ,但我猜是因为每个订单都有不同数量的收货日期,所以它不起作用。我怎样才能做到这一点?

想要的结果:
Ord_ID     Supplier    PO_Date   First_Receipt_Date    Last_Receipt_Date
1 A 2/3/18 2/15/18 2/15/18
2 B 2/4/18 3/13/18 3/13/18
3 C 2/7/18 3/1/18 3/29/18
4 B 2/9/18 2/20/18 2/27/18
5 D 2/18/18 4/2/18 4/2/18

最佳答案

使用 dplyr .首先,确保列Date是日期格式。假设数据帧被命名为 mydata :

library(dplyr)
mydata <- mydata %>%
mutate(Date = as.Date(Date, "%m/%d/%y")

现在您可以过滤 Receipt ,计算最大/最小日期,然后过滤原始数据为 PO并将它们连接在一起:
mydata %>% 
filter(Trans_Type == "Receipt") %>%
group_by(Ord_ID, Supplier) %>%
summarise(First_Receipt_Date = min(Date),
Last_Receipt_Date = max(Date)) %>%
ungroup() %>%
left_join(filter(mydata, Trans_Type == "PO")) %>%
select(Ord_ID, Supplier, PO_Date = Date, First_Receipt_Date, Last_Receipt_Date)

结果:
  Ord_ID Supplier PO_Date    First_Receipt_Date Last_Receipt_Date
<int> <chr> <date> <date> <date>
1 1 A 2018-02-03 2018-02-15 2018-02-15
2 2 B 2018-02-04 2018-03-13 2018-03-13
3 3 C 2018-02-07 2018-03-01 2018-03-29
4 4 B 2018-02-09 2018-02-20 2018-02-27
5 5 D 2018-02-18 2018-04-02 2018-04-02

关于r - 组织数据框 - 将一列分成三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55289624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com