【问题标题】:Capturing all items in basket (R/arulesSequences)捕获篮子中的所有项目 (R/arulesSequences)
【发布时间】:2017-05-22 21:05:55
【问题描述】:

我在使用 R 中的 arulesSequences 包时遇到问题。我能够将篮子读入程序并创建一个 data.frame,但是它无法识别第一列之外的任何其他项目。下面是我的数据集的一个示例,它遵循此处演示的形式:Data Mining Algorithms in R/Sequence Mining/SPADE

    [sequenceID] [eventID] [SIZE] items
    2 1 1 OB/Gyn
    15 1 1 Internal_Medicine
    15 2 1 Internal_Medicine
    15 3 1 Internal_Medicine
    56 1 2 Internal_Medicine Neurology
    84 1 1 Oncology
    151 1 2 Hematology Hematology
    151 2 1 Hematology/Oncology
    151 3 1 Hematology/Oncology
    185 1 2 Gastroenterology Gastroenterology

数据集从 SAS 导出为 [.CSV],然后在 Excel 中转换为制表符分隔的 [.TXT] 文件。标头被删除以导入 R,但为了清楚起见,我将它们放在上面的括号中。所有空格都替换为下划线(“_”),并尽可能简化项目名称。每个项目都列在单独的列中。以下命令用于导入文件:

    baskets <- read_baskets(con = "...filepath/spade.txt", sep = "[ \t]+",info=c("sequenceID", "eventID", "SIZE"))

我没有出现任何错误,因此我继续执行以下命令:

    as(baskets, "data.frame")

这里,它会按要求返回 data.frame,但是它无法捕获第一列之外的项目:

    items sequenceID eventID SIZE
    {OB/Gyn} 2 1 1
    {Internal_Medicine} 15 1 1
    {Internal_Medicine} 15 2 1
    {Internal_Medicine} 15 3 1
    {Internal_Medicine} 56 1 2
    {Oncology} 84 1 1
    {Hematology} 151 1 2
    {Hematology/Oncology} 151 2 1
    {Hematology/Oncology} 151 3 1
    {Gastroenterology} 185 1 2

第 5 行应如下所示:

    {Internal_Medicine, Neurology} 56 1 2

我尝试将文件直接作为 [.CSV] 导入,但 data.frame 的格式与我上面尝试使用制表符的格式相似,只是它在第一项前面放置了一个逗号:

    {,Internal_Medicine} 56 1 2

任何故障排除建议将不胜感激。看来这个包在格式化方面很挑剔。

【问题讨论】:

    标签: r sequences arules


    【解决方案1】:

    第 5 行应如下所示:

    {Internal_Medicine, Neurology} 56 1 2
    

    退房

    library(arulesSequences)
    packageVersion("arulesSequences")
    # [1] ‘0.2.16’
    packageVersion("arules")
    # [1] ‘1.5.0’
    txt <- readLines(n=10)
    2 1 1 OB/Gyn
    15 1 1 Internal_Medicine
    15 2 1 Internal_Medicine
    15 3 1 Internal_Medicine
    56 1 2 Internal_Medicine Neurology
    84 1 1 Oncology
    151 1 2 Hematology Hematology
    151 2 1 Hematology/Oncology
    151 3 1 Hematology/Oncology
    185 1 2 Gastroenterology Gastroenterology
    writeLines(txt, tf<-tempfile())
    baskets <- read_baskets(con = tf, sep = "[ \t]+",info=c("sequenceID", "eventID", "SIZE"))
    as(baskets, "data.frame")
    #                            items sequenceID eventID SIZE
    # 1                       {OB/Gyn}          2       1    1
    # 2            {Internal_Medicine}         15       1    1
    # 3            {Internal_Medicine}         15       2    1
    # 4            {Internal_Medicine}         15       3    1
    # 5  {Internal_Medicine,Neurology}         56       1    2 # <----------
    # 6                     {Oncology}         84       1    1
    # 7                   {Hematology}        151       1    2
    # 8          {Hematology/Oncology}        151       2    1
    # 9          {Hematology/Oncology}        151       3    1
    # 10            {Gastroenterology}        185       1    2
    

    【讨论】:

    • 这种方法似乎对我不起作用。如果我导入 [.CSV] 文件,然后使用您的第一行代码 writeLines(file, file_tf &lt;-tempfile()) 我收到错误
    • @diaferiaj 为什么要导入它,然后使用 writeLines 再次导出它?
    • @diaferiaj readLines + writeLines 只是重新创建您的 CSV。是的,代码和你的一样。我特意添加了软件包版本供您比较。除此之外:也许 csv 中缺少的标题行(我的没有)?也许您的 csv 使用了您没有考虑过的不同分隔符?没有您的数据和会话信息就无法解决。
    • 我了解,并认为可能难以确定问题。 arules 是相同的版本,并且 arulesSequences 是“0.2.17”。我的 csv 和 txt 版本都没有标题,它们应该分别用逗号分隔和制表符分隔。感谢您的考虑。我将不得不继续调整设置和格式。
    • 似乎错误是由项目格式引起的。我创建了一个将每个项目翻译成缩写的键,然后重新运行代码。结果模仿了我发布的链接:{IM, NEURO} 56 1 2
    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2012-11-23
    • 1970-01-01
    • 2012-08-09
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多