R 将数据帧转换为列表并输入函数
我有一个具有不同收据、项目及其值的数据集:R 将数据帧转换为列表并输入函数,r,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'
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)
)
)
我创建了一个函数,它将项的向量作为向量形式的Target、item1、item2的输入组合
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)
}
我将数据框转换为列表
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
我尝试了两种方法:
findvalueca,b,k给出了正确的值23
当我尝试findvaluelistdata[1]时,它没有给出任何值
我犯了什么错误。Listdata应在循环中发送到findvalue 您的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)
> class(listdata[1])
[1] "list"
> findvalue(unlist(listdata[1]))
[1] 23