R中具有多个构成键的字段的传播函数

Spread function in R with multiple fields which constitute the key

我正在努力以这种方式改造我的 table,以便我可以加入另一个 table。这是我的初始 table 示例:

df1 <- data.frame(ID = c(1,1,1,2,2,2,3,3,3),
                  date=c('2021-11-01', '2021-11-01', '2021-11-02','2021-11-01',
                         '2021-11-01', '2021-11-02','2021-11-01', '2021-11-01', '2021-11-02'
                         ),
                  event_name = c('a', 'a', 'c', 'a', 'b', 'b','a', 'b', 'c'),
                  Time_duration = c(1, 3, 5, 9, 2, 4, 1, 6, 8))

这是我希望数据在传播后如何看待的示例:

df2 <- data.frame(ID = c(1,1, 2,2, 3,3),
                  date=c('2021-11-01', '2021-11-02',
                         '2021-11-01', '2021-11-02',
                         '2021-11-01', '2021-11-02'
                         ),
                  event_A_duration_sum = c(4, 0,
                                       9, 0,
                                       1,0),
                  event_B_duration = c(0, 0,
                                       2, 4,
                                       6,0),
                  event_C_duration = c(0, 5,
                                       0, 0,
                                       0,8))

在我的期末考试 table 中,我需要按 (ID, Date) 对数据进行分组;为我的最终 table 标识的唯一标识将是 ID 和日期。例如,每个 ID 和日期可以有多个相同类型的事件。

我希望这是有道理的。我应该连接我的标识符然后将它们拆分回去吗?或者有没有更好的方法使用 DPLYR 来做到这一点?

干杯,感谢任何帮助。

library(data.table)

dcast(data.table(df1), 
ID + date ~ event_name,value.var = 'Time_duration',
 fun.aggregate = sum)

Key: <ID, date>
      ID       date     a     b     c
   <num>     <char> <num> <num> <num>
1:     1 2021-11-01     4     0     0
2:     1 2021-11-02     0     0     5
3:     2 2021-11-01     9     2     0
4:     2 2021-11-02     0     4     0
5:     3 2021-11-01     1     6     0
6:     3 2021-11-02     0     0     8