浓缩;“平坦”;使用arules eclat进行分析的事件列表

浓缩;“平坦”;使用arules eclat进行分析的事件列表,r,R,我有一个类似这样的文件(人员ID和产品名称列表) 我想将它转换为类似这样的东西(每个人购买的产品列表),用于eclat 我所能做的最好的事情就是将其作为数据帧读取,并尝试使用apply函数的变体来创建新的数据结构 collectValues <- function(obs,map) { a = obs[1][1] b = obs[2][1] if( ! (a %in% map) ) { map[[a]] <- list(b) } else { c(ma

我有一个类似这样的文件(人员ID和产品名称列表)

我想将它转换为类似这样的东西(每个人购买的产品列表),用于eclat

我所能做的最好的事情就是将其作为数据帧读取,并尝试使用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)
  }
}

collectValues我想你在追求
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"

dat这工作做得很好-谢谢。对于eclat,似乎不需要排序。。。
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)
  }
}
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"