我有一个巨大的数据集,其中包含访问超市的客户信息。我为每个客户提供唯一的客户ID,客户可以多次返回超市。我想为每个客户ID创建功能选择,以便我可以过滤掉客户访问超市的次数。
我的表格包含一组列TripType
,VisitNo
,Upc
,Weekday
等。
我创建了一个表并将其转换为数据帧来计算频率。现在,我想创建每个客户ID的多个列,访问次数超过2次,并且列车数据集中至少有6000个这样的变量。
head(train,6)
TripType VisitNo Upc
40 5 1100
30 7 1101
20 9 1101
20 11 1102
10 13 1103
5 15 1102
客户的唯一ID是Upc。客户1101,1102曾两次访问过。
df <- data.frame(table(train$Upc))
head(df,4)
Var1 Freq
1101 1
1101 2
1102 2
1103 1
现在我想在我的列车数据集中创建频率大于2的那些变量的列。所以我想要的输出是(功能重新设计)
TripType VisitNo Upc 1101 1102
40 5 1100 0 0
30 7 1101 1 0
20 9 1101 1 0
20 11 1102 0 1
10 13 1103 0 0
5 15 1102 0 1
手动创建列的功能太多了。任何帮助是极大的赞赏。谢谢。
答案 0 :(得分:1)
我有部分解决方案。希望它至少能以某种方式帮助你,特别是考虑到没有人回答的事实。
r<-as.vector(subset(data.frame(table(train$Upc)), Freq>=2)[,1])
#selects relevant customers id in one vector.
#If greater than 2 needed remove equal sign in Freq>=2
train[,r] <- NA
#creates columns with selected IDs in the data frame
train[,4]<-train$Upc==colnames(train)[4]
# 4 is the number of columns in your original data frame +1
最后一行将根据您的需要为第一个选定的客户引入数据。此时我没有任何其他解决方案,而是手动更改最后一行中的4s和5,6等。为后续客户。我知道如果你有很多这样的话,这不是最佳选择。一个函数应该解决它,但我无法弄明白。但我认为你可以从这里挑选并提出另一个可能有希望回答的问题。