【问题标题】:Calculate categories co-occurrences in R (tidyverse)计算 R 中的类别共现(tidyverse)
【发布时间】:2019-10-14 19:56:43
【问题描述】:

我有以下数据框


| Document | CatA | CatB | CatC | CatD |
|----------|------|------|------|------|
| A        | 1    | 0    | 1    | 1    |
| B        | 0    | 1    | 1    | 0    |
| C        | 1    | 1    | 0    | 1    |

表示类别 CatA、CatC 和 CatD 在文档 A 等中同时出现。
我需要计算所有文档的类别共现矩阵,例如如下:

|      | CatA | CatB | CatC | CatD |
|------|------|------|------|------|
| CatA | NA   | 1    | 1    | 2    |
| CatB | 1    | NA   | 1    | 1    |
| CatC | 1    | 1    | NA   | 1    |
| CatD | 2    | 1    | 1    | NA   |

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    如果您的数据帧只包含零和一,那么您可以使用crossprod() 函数直接在基础 R 中生成共现矩阵:

    x <- cbind(c(1,0,1), c(0, 1, 1), c(1,1,0), c(1,0,1))
    crossprod(x)
    

    产生

         [,1] [,2] [,3] [,4]
    [1,]    2    1    1    2
    [2,]    1    2    1    1
    [3,]    1    1    2    1
    [4,]    2    1    1    2
    

    然后可以将对角线设置为NA 使用

    res <- crossprod(x)
    diag(res) <- NA
    res
    
         [,1] [,2] [,3] [,4]
    [1,]   NA    1    1    2
    [2,]    1   NA    1    1
    [3,]    1    1   NA    1
    [4,]    2    1    1   NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2020-07-04
      • 2019-12-01
      • 2017-12-18
      相关资源
      最近更新 更多