我是R语言的初学者。
我有一个这样的数据框-

df <- data.frame(CustomerID = c(1, 1, 2, 2, 2, 3, 3)
                , ProductPurchased = c('A', 'B', 'B', 'A', 'C', 'C', 'B')
                    , PurchaseNumber = c(1, 2, 1, 2, 3, 1, 2))

df
CustomerID ProductPurchased PurchaseNumber
1                A              1
1                B              2
2                B              1
2                A              2
2                C              3
3                C              1
3                B              2

PurchaseNumber表示第n次购买。例如-1表示首次购买,2表示第二次购买,依此类推。

我想添加一列“FirstPurchase”,该列将填充该客户首次购买的产品
CustomerID ProductPurchased PurchaseNumber  FirstPurchase
1                A              1               A
1                B              2               A
2                B              1               B
2                A              2               B
2                C              3               B
3                C              1               C
3                B              2               C

下一步-
我正在寻找是否可以读取MAX(PurchaseNumber)并基于此
动态创建那么多列,并且每个列都应具有为此购买的产品
顾客。
举例-由于此处的Max(PurchaseNumber)为3。因此应创建3列(不必担心将它们命名为First,Second,Third),如下所示-
CustomerID ProductPurchased PurchaseNumber  FirstPurchase   SecondPurchase      ThirdPurchase
1                A              1               A               B               NA
1                B              2               A               B               NA
2                B              1               B               A               C
2                A              2               B               A               C
2                C              3               B               A               C
3                C              1               C               B               NA
3                B              2               C               B               NA

我确实尝试了data.table的几件事-
dt <- data.table(df)

# this will give CustomerID and their first purchase
dt[PurchaseNumber == 1, 2, with = FALSE]

但是如何将它们应用于其余的列?

任何帮助表示赞赏。即使是指针,我应该查看的软件包也将非常有帮助。

谢谢。

最佳答案

我认为您最好的选择是tidyr:

library(tidyr)
spread(df, PurchaseNumber, ProductPurchased)

# CustomerID 1 2    3
# 1          1 A B <NA>
# 2          2 B A    C
# 3          3 C B <NA>

07-24 18:56