【发布时间】:2021-06-21 03:37:34
【问题描述】:
这是对上一个问题的扩展:How do you replace values in a field with max/min values from other fields?。
鉴于 Category1、Category2、Type、Index 和 Date,我想创建一个名为 New_Date 的新字段,如下所示。 New_Date 将是 Date,它对应于属于 Category1 和 的每个组合的最高 Index Category2 服从另一个字段Type 等于 1。
我的数据框有 >1m 条记录和 50 个字段,因此希望有一个基于 setDT 的解决方案。
任何想法都非常感谢!
Category1<-c(rep("A",8),rep("B",3),rep("C",4))
Category2<-c(rep("X",5),rep("Y",4),rep("Z",6))
Index<-c(seq(1,8),seq(1:3),seq(1:4))
Date<-c("01/01/2020","01/02/2020","01/03/2020","01/04/2020","01/05/2020","01/06/2020","01/07/2020","29/07/2020","01/01/2014","01/02/2014","01/01/2015","01/01/2014","01/01/2015","01/01/2016","01/01/2017")
Type<-c(1,2,1,2,2,1,2,1,1,2,1,1,2,2,1)
| Category1 | Category2 | Index | Date | Type | New_Date |
|---|---|---|---|---|---|
| A | X | 1 | 01/01/2020 | 1 | 01/03/2020 |
| A | X | 2 | 01/02/2020 | 2 | 01/03/2020 |
| A | X | 3 | 01/03/2020 | 1 | 01/03/2020 |
| A | X | 4 | 01/04/2020 | 2 | 01/03/2020 |
| A | X | 5 | 01/05/2020 | 2 | 01/03/2020 |
| A | Y | 6 | 01/06/2020 | 1 | 29/07/2020 |
| A | Y | 7 | 01/07/2020 | 1 | 29/07/2020 |
| A | Y | 8 | 29/07/2020 | 1 | 29/07/2020 |
| B | Y | 1 | 01/01/2014 | 1 | 01/01/2014 |
| B | Z | 2 | 01/02/2014 | 2 | 01/01/2015 |
| B | Z | 3 | 01/01/2015 | 1 | 01/01/2015 |
| C | Z | 1 | 01/01/2014 | 1 | 01/01/2017 |
| C | Z | 2 | 01/01/2015 | 2 | 01/01/2017 |
| C | Z | 3 | 01/01/2016 | 2 | 01/01/2017 |
| C | Z | 4 | 01/01/2017 | 1 | 01/01/2017 |
【问题讨论】:
标签: r dataframe data.table