r - 组织数据框 - 将一列分成三列
问题描述
我有一个如下所示的数据集:
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
推荐阅读
- embedded - 如何对 PA15 PE15 引脚闪烁 LED 的门控 EFM32LG230 进行时钟控制
- javascript - 如何使用 Script Lab 使用 Microsoft Office JavaScript API 进行本地文件 I/O?
- regex - 正则表达式中“and”的重复
- excel - 根据用户输入生成行数
- insomnia - 失眠错误:使用制表符会导致不可预知的结果
- scikit-image - 试图从 skimage.feature 理解 match_template
- ios - Mapbox iOS SDK 使用多个文件
- python - 如何修复TypeError:'float'和'tuple'(CNN + Regr模型)的实例之间不支持'<'?
- sql - 找不到用于清除数据库的 DB2 存储过程
- java - 通过 java stacktrace 搜索 Datadog