Condense" flat"使用arules eclat进行分析的事件列表

时间:2014-04-28 15:04:56

标签: r

我有一个看起来像这样的文件(人员ID和产品名称列表)

123   A
123   B
123   D
456   A
456   B
123   C

我想将它与eclat一起转换成这样的东西(每个人购买的产品清单)

list(
   c("A", "B", "D", "C"),
   c("A", "B" )
 )

我能做的最好的事情是将其作为数据框读取,并尝试使用apply函数的变体来制作新的数据结构。

collectValues <- function(obs,map) {
  a = obs[1][1]
  b = obs[2][1]
  if( ! (a %in% map) ) {
    map[[a]] <- list(b)
  } else {
    c(map[[a]], b)
  }
}

但我对R来说太新了,无法让它发挥作用......

1 个答案:

答案 0 :(得分:1)

我认为你在split之后就像在:

dat <- read.table(text="123   A
123   B
123   D
456   A
456   B
123   C", header=FALSE, stringsAsFactors = FALSE)

lapply(split(dat[, 2], dat[, 1]), sort)

## $`123`
## [1] "A" "B" "C" "D"
## 
## $`456`
## [1] "A" "B"

我将lapplysort一起使用,因为这就是您想要的输出效果,但您可能不需要它。