转换数据框,以便列出的每个唯一事务成为单行

Cyb*_*tic 3 r reshape dataframe

我有一个这样的数据框:

        trans_id   product_id
1          1          456
2          4          223
3          1          778
4          1          774
5          5          999
6          4          123
Run Code Online (Sandbox Code Playgroud)

我需要转换它,以便所有trans_id被列为单行,如下所示:

trans_id      V1       V2     V3
1            456      778   774
4            223      123
5            999
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 5

您应该添加辅助ID列.getanID从我的"splitstackshape"包中可以轻松实现.由于"splitstackshape"也加载"data.table",因此很容易使用dcast.data.table以下方法转换为宽格式:

library(splitstackshape)
dcast.data.table(
  getanID(mydf, "trans_id"), 
  trans_id ~ .id, value.var = "product_id")
#    trans_id   1   2   3
# 1:        1 456 778 774
# 2:        4 223 123  NA
# 3:        5 999  NA  NA
Run Code Online (Sandbox Code Playgroud)

等效的"dplyr"+"tidyr"方法类似于:

library(dplyr)
library(tidyr)

mydf %>%
  group_by(trans_id) %>%
  mutate(id = sequence(n())) %>%
  spread(id, product_id)
Run Code Online (Sandbox Code Playgroud)