将Dataframe转换为List并输入函数

时间:2017-03-13 03:21:08

标签: r

我有一个包含不同收据,项目及其值的数据集:

library(arules)

library(VennDiagram)

Data <- data.frame(
  Receipt_ID = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,6,6,6),
  item = c('a','b','c','k','a','b','d','k','a','k','c','q','k',                    'a','b','a','a', 'b', 'c'
  )
  ,
  value = c(2,3,2,4,2,5,6,7,8,1,2,3,4,5,6,7,8,3,4
  )
)

我创建了一个市场篮子,其中一些输出如下:

rules <- data.frame(
  Target = c("a","a","b"),
  item1 = c("b","b","k"  )
  ,
  item2 = c("k","",""),
  lift = c(1,2,3),
  confidence = c(0.08,0.45,0.1)
  )
)

我创建了一个函数,它将项目的Vector作为输入(目标,项目1,项目2的矢量形式的组合)

findvalue <- function (vectormb) {
  keyvalue <- Data[Data$item %in% vectormb, ]
  keyvaluetran <- sapply(vectormb,function(x){
    ret <- unique (keyvalue$Receipt_ID[keyvalue$item==x])
  })

  #reducetran <- calculate.overlap(keyvaluetran)
  reducetran1 <- Reduce(intersect,keyvaluetran)
  totalsales <- sum (keyvalue$value[keyvalue$Receipt_ID %in% reducetran1])
  return(totalsales)

}

我将Dataframe转换为List

    createlist <- function(data){
      subset <- data.frame(data$Target,data$item1,data$item2)
      listdata <- apply(subset,1,
            function(x){
              ret<-list( x[1:ncol(subset)])
              names(ret)<-as.character(x[1])
              return(ret)
            })

listdata <- createlist(rules)

列表数据将数据帧转换为矢量。

我的问题是如何将Listdata输出传递给函数findvalue。

我尝试了几件事:

  1. findvalue(c(“a”,“b”,“k”))给出的值为23。

  2. 当我尝试findvalue(listdata [1])时,这并没有给出任何值。

  3. 我做错了什么。 Listdata应该循环发送到findvalue。

1 个答案:

答案 0 :(得分:0)

您的createlist()函数没有返回值 - 因此它不会为您返回任何内容。以下是我的建议:

createlist <- function(data) {
  subset <- data.frame(data$Target,data$item1,data$item2)
  apply(subset,1,
        function(x){
          ret<-list( x[1:ncol(subset)])
          names(ret)<-as.character(x[1])
          return(ret)
        })
}

listdata <- createlist(rules)

这将正确创建您的listdata变量。 然后,为了在其上运行findvalue(),当前函数的编写方式,您需要传递一个向量,而不是列表。因此:

> class(listdata[1])
[1] "list"
> findvalue(unlist(listdata[1]))
[1] 23