【问题标题】:Pairs of Observations within Groups组内的观察对
【发布时间】:2014-04-24 15:54:05
【问题描述】:

我有一个问题,我知道如何使用 SQL 解决,但我希望在 R 中使用新数据集实施解决方案。我一直在尝试使用 reshape2 包来解决问题,但我对我想要完成的事情没有任何运气。这是我的问题:

我有一个数据集,我需要在其中查看来自另一个组的所有项目对。我在下面创建了一个玩具示例来进一步解释。

BUNCH    FRUITS
1        apples
1        bananas
1        mangos
2        apples
3        bananas
3        apples
4        bananas
4        apples

我想要的是所有可能对的列表,并将它们在一堆中一起出现的频率相加。理想情况下,我的输出应该是这样的:

FRUIT1    FRUIT2     FREQUENCY
APPLES    BANANAS    3
APPLES    MANGOS     1

我的最终目标是制作一些我最终能够导入 Gephi 进行网络分析的东西。为此,我需要一个 Source 和 Target 列(上面的又名 FRUIT1 和 FRUIT2)。

如果对任何人有帮助,请使用 SQL 中的原始解决方案:PROC SQL in SAS - All Pairs of Items

【问题讨论】:

    标签: r dataset


    【解决方案1】:

    以下内容似乎有效:

    tmp = table(DF$FRUITS, DF$BUNCH) != 0
    #> tmp         
    #             1     2     3     4
    #  apples  TRUE  TRUE  TRUE  TRUE
    #  bananas TRUE FALSE  TRUE  TRUE
    #  mangos  TRUE FALSE FALSE FALSE
    
    do.call(rbind, 
            combn(unique(as.character(DF$FRUITS)), 
                  2,
                  function(x) data.frame(fr1 = x[1], 
                                         fr2 = x[2], 
                                         freq = sum(colSums(tmp[x, ]) == 2)), 
                  simplify = F))
    #      fr1     fr2 freq
    #1  apples bananas    3
    #2  apples  mangos    1
    #3 bananas  mangos    1
    

    DF:

    DF = structure(list(BUNCH = c(1L, 1L, 1L, 2L, 3L, 3L, 4L, 4L), FRUITS = structure(c(1L, 
    2L, 3L, 1L, 2L, 1L, 2L, 1L), .Label = c("apples", "bananas", 
    "mangos"), class = "factor")), .Names = c("BUNCH", "FRUITS"), class = "data.frame", row.names = c(NA, 
    -8L))
    

    【讨论】:

    • 我在尝试此解决方案时收到Error in tmp[x, ] : subscript out of bounds
    • @user3033896 :嗯,你的意思是当你应用到你的数据或者当你复制粘贴上面的时候?在新的会话中,如果我复制 DF 和上面的代码,它对我来说很好。如果是第一种情况,您能否发布一个发生此错误的示例?
    猜你喜欢
    • 2019-09-09
    • 2012-04-20
    • 2019-01-30
    • 1970-01-01
    • 2016-01-25
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多