【问题标题】:Manually convert transactions list to market basket format手动将交易列表转换为购物篮格式
【发布时间】:2018-09-24 07:45:43
【问题描述】:

我想要做的是将存储为 CSV 文件的交易列表编辑为 R 中的“arules”包可以使用的东西。但我也想将其保留为数据框,以便我可以导出它到不同的 CSV 文件。所以我从一个简单的数据集开始:

Fruit   Milk    Eggs
yes   yes     no
no    no      yes
no    yes     yes
yes   yes     yes

它需要看起来像这样:

Fruit   Milk    
                Eggs
        Milk    Eggs
Fruit   Milk    Eggs

所以,我读入 CSV 并获取列名:

df1 <- read.csv('basket_test.csv')
l <- c()
#create list with item names
for(i in 1:3){
  print(i)
  l <- append(l,names(df1)[i])
  i=i+1
}

这是我遇到问题的地方,R 看到分类数据,当我尝试更改它时它会抱怨:

#replace "yes" with item name
for(x in 1:3){
  for(y in 1:4){
    if(df1[y,x]=="yes"){
      df1[y,x] <- l[x]
    }
  }
}

它给了我这个错误:

无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生无效因子水平,NA产生

数据框现在看起来像这样:

  Fruit Milk Eggs
1  <NA> <NA>   no
2    no  no  <NA>
3   no  <NA> <NA>
4  <NA> <NA> <NA>

我在数据框单元格上尝试了as.character,方法是遍历每个单元格,然后再次尝试该例程,但这不起作用。那么,我应该如何处理我的数据框以更改其中的值?

谢谢

编辑我确实找到了这个:

df_fact <- data.frame(lapply(df1,as.factor))
df_trans <- as(df_fact, 'transactions')

来自这里的帖子:R-convert transaction format dataset to basket format for Market Basket Analysis

但我正在尝试自己做,这种方法不会产生我可以存储为 CSV 的东西。

【问题讨论】:

    标签: r dataframe market-basket-analysis


    【解决方案1】:

    您可以将mapplyas.data.frame() 结合使用:

    df <- read.table(text = "Fruit   Milk    Eggs
    yes   yes     no
                     no    no      yes
                     no    yes     yes
                     yes   yes     yes", header = TRUE)
    
      Fruit Milk Eggs
    1   yes  yes   no
    2    no   no  yes
    3    no  yes  yes
    4   yes  yes  yes
    
    df1 <- as.data.frame(mapply(function(x, y){
      ifelse(x == 'yes', y, "")
    }, df, names(df)))
    
    
      Fruit Milk Eggs
    1 Fruit Milk     
    2            Eggs
    3       Milk Eggs
    4 Fruit Milk Eggs
    

    请注意,所有三列都属于 factor 类,您可能希望使用 `as.character 转换它们。

    df1[] <- lapply(df1, as.character)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2020-04-10
      相关资源
      最近更新 更多