我是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>