【发布时间】:2015-11-27 16:05:01
【问题描述】:
我是 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 次购买。 Ex - 1 表示第一次购买,2 表示第二次购买等。
我想添加一个名为“FirstPurchase”的列,它将为该客户首次填充 ProductPurchased
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) 并以此为基础
动态创建那么多列,每列都应该有为此购买的产品
客户。
Ex - 因为这里的 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]
但是如何将它们应用于其余列?
感谢任何帮助。即使是我应该研究什么包的指针也会非常有帮助。
谢谢。
【问题讨论】:
-
A B C 指的是什么?
-
看来你可以
merge"df" 和reshape(df, direction = "wide", idvar = "CustomerID", timevar = "PurchaseNumber")by "CustomerID"。
标签: r dataframe data.table