【问题标题】:Modify data input format for Apriori algorithm修改 Apriori 算法的数据输入格式
【发布时间】:2016-06-20 06:22:51
【问题描述】:

我有一个格式如下的数据集:

txn_id  prod_name
  223      milk 
  223      eggs  
  235      eggs
  235      bread
  235      butter

我正在尝试使用这些数据来查找各种产品之间的相关性(市场篮分析)。为了在 R 中使用 Apriori 算法,数据需要是格式

| prod_name | prod_name | prod_name |
  milk         eggs
  eggs         bread      butter

如何做到这一点?

【问题讨论】:

  • 您正在寻找“dcast”功能。查一下这个功能,应该有帮助。您可以根据自己的需要使用单独的公式对列进行分组。但首先你需要安装包“reshape2”。

标签: r apriori arules


【解决方案1】:

arules 包具有此功能。如果您查看文档,在transactions-class 下,您会发现:

## example 4: creating transactions from a data.frame with transaction IDs and items
a_df3 <- data.frame(
    TID = c(1,1,2,2,2,3),
    item=c("a","b","a","b","c", "b")
)
trans4 <- as(split(a_df3[,"item"], a_df3[,"TID"]), "transactions")

split 重新排列数据,以便您拥有一个列表,其中包含每行具有相同 TID 的所有项目。

【讨论】:

    【解决方案2】:

    您可以使用dplyrtidyr

    library(dplyr)
    library(tidyr)
    
    adf <- read.table(header = TRUE, stringsAsFactors = FALSE, text = '
    txn_id  prod_name
    223      milk 
    223      eggs  
    235      eggs
    235      bread
    235      butter') %>% tbl_df
    
    ### For each transaction, a 'prod_name_key' is created for each 'prod_name'
    adf %>%
      group_by(txn_id) %>%
      mutate(prod_name_key = paste0('prod_name_', 1:n())) %>%  # Creates key
      spread(prod_name_key, prod_name, fill = '')              # Reshapes data
    
    ## Source: local data frame [2 x 4]
    ## 
    ##   txn_id prod_name_1 prod_name_2 prod_name_3
    ##    (int)       (chr)       (chr)       (chr)
    ## 1    223        milk        eggs            
    ## 2    235        eggs       bread      butter
    

    可能有更简洁的方法可以做到这一点,但这似乎可以满足您的要求。

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多