如何将arules::inspect的输出捕获为data.frame?
解决arules::inspect输出转为data.frame的问题
我知道你在用arules包的ECLAT算法挖掘频繁项集时,遇到了没法把inspect()的输出保存成data.frame的困扰——毕竟直接用out <- inspect(f)得到的是NULL,根本存不下数据。别担心,这里有几个简单好用的方法:
方法1:直接转换为data.frame
arules的频繁项集对象(也就是你代码里的f)本身支持直接转换为data.frame,用as()函数就能搞定:
library(arules) dataset <- read.transactions("8GbjnHK2.txt", sep = ";", rm.duplicates = TRUE) f <- eclat(dataset, parameter = list(supp = 0.001, maxlen = 17, tidLists = TRUE)) # 先按support排序 sorted_f <- sort(f, by = "support") # 直接转为data.frame f_df <- as(sorted_f, "data.frame") # 查看前10条结果,和inspect输出格式一致 head(f_df, 10)
转换后的data.frame里,items列默认是itemsets类型,如果需要转成普通字符串方便后续处理,可以用labels()函数:
f_df$items <- labels(sorted_f)
方法2:手动构造data.frame
如果你想更灵活地控制输出列,可以直接从频繁项集对象中提取属性来构造data.frame:
# 提取项集标签、support等信息 f_df <- data.frame( items = labels(f), support = quality(f)$support, stringsAsFactors = FALSE ) # 按support降序排序后取前10条 f_df_sorted <- head(f_df[order(f_df$support, decreasing = TRUE), ], 10) # 查看结果 print(f_df_sorted)
为什么直接inspect不行?
这里要提一句,inspect()函数的设计目的是打印输出,它的返回值是NULL,所以直接赋值肯定存不下数据。上面的方法都是直接从频繁项集对象本身提取数据,比捕获打印输出要高效得多。
内容的提问来源于stack exchange,提问作者hpesoj626
相关产品推荐
相关产品推荐

