根据不同表的行值创建多个列

时间:2015-11-06 22:14:29

标签: r

我有一个巨大的数据集,其中包含访问超市的客户信息。我为每个客户提供唯一的客户ID,客户可以多次返回超市。我想为每个客户ID创建功能选择,以便我可以过滤掉客户访问超市的次数。

我的表格包含一组列TripTypeVisitNoUpcWeekday等。 我创建了一个表并将其转换为数据帧来计算频率。现在,我想创建每个客户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

手动创建列的功能太多了。任何帮助是极大的赞赏。谢谢。

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等。为后续客户。我知道如果你有很多这样的话,这不是最佳选择。一个函数应该解决它,但我无法弄明白。但我认为你可以从这里挑选并提出另一个可能有希望回答的问题。