【问题标题】:Create Multiple Columns based on row values of different table根据不同表的行值创建多列
【发布时间】:2015-11-06 22:14:28
【问题描述】:

我有一个庞大的数据集,其中包含访问超市的客户信息。我对每个客户都有唯一的客户 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

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

【问题讨论】:

    标签: r


    【解决方案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 等之外,我没有任何其他解决方案。为后续客户。我知道如果你有很多,这不是最佳选择。一个函数应该解决它,但我无法弄清楚。但我认为您可以从这里选择并提出另一个问题,这可能会得到回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2021-12-26
      相关资源
      最近更新 更多