【问题标题】:Building an adjacency matrix in R在 R 中构建邻接矩阵
【发布时间】:2018-04-24 05:09:09
【问题描述】:

大家好,这是我的问题。

使用

> visite_cliente <- aggregate(info.uso.2$N,list(CodCliente = info.uso.2$CodCliente, museo = info.uso.2$museo),sum)

我创建了以下矩阵:

> head(visite_cliente)

   CodCliente           museo      x
1       1247 ABBAZIA DI FRUTTUARIA 1
2       3260 ABBAZIA DI FRUTTUARIA 1
3       4104 ABBAZIA DI FRUTTUARIA 1
4       4145 ABBAZIA DI FRUTTUARIA 1
5       5368 ABBAZIA DI FRUTTUARIA 1
6       5530 ABBAZIA DI FRUTTUARIA 1

CodCliente 是我客户的 ID,而“museo”是客户参观的博物馆(我在数据框中有 139 个博物馆),X 值表示客户一年内参观博物馆的次数。 如果客户访问的博物馆不止一次,您可以在“visite_cliente”中多次找到同一个 ID。

我应该创建一个邻接矩阵,其中我有博物馆的列(所以 139 列),行中的 ID,并在矩阵中插入客户参观每个博物馆的时间。

谢谢

【问题讨论】:

  • 欢迎 ianux22!您能否提供一个可重现的示例来创建 visite_cliente 对象?

标签: r adjacency-matrix


【解决方案1】:

这是一个经典的长宽重塑问题

只是做

library(data.table)

dcast(data = visite_cliente, CodCliente ~ museo, value.var = "x")

【讨论】:

    【解决方案2】:

    这并不漂亮,但它有效。由于您的数据没有重复使用 CodCliente,只有一个博物馆,也没有重新访问博物馆,所以我又添加了几行。如果将行名设为 CodCliente,列名设为 museo,则可以简单地将它们用作邻接矩阵的索引。

    ## sample data
    visite_cliente = read.table(text="CodCliente   museo      x
    1       1247 'ABBAZIA DI FRUTTUARIA' 1
    2       3260 'ABBAZIA DI FRUTTUARIA' 1
    3       4104 'ABBAZIA DI FRUTTUARIA' 1
    4       4145 'ABBAZIA DI FRUTTUARIA' 1
    5       5368 'ABBAZIA DI FRUTTUARIA' 1
    6       5530 'ABBAZIA DI FRUTTUARIA' 1
    7       5530 'ABBAZIA DI FRUTTUARIA' 1
    8       1234 'MUSEO EGIZIO'  1
    9       1247 'MUSEO EGIZIO'  1",
    header=TRUE, stringsAsFactors=FALSE)
    
    
    Adj = matrix(0, nrow=length(unique(visite_cliente$CodCliente)),
            ncol=length(unique(visite_cliente$museo)),
            dimnames = list(rownames=unique(visite_cliente$CodCliente),
                colnames=unique(visite_cliente$museo)))
    
    for(row in 1:nrow(visite_cliente)) {
        Adj[as.character(visite_cliente[row,1]), visite_cliente[row,2]] =
            Adj[as.character(visite_cliente[row,1]), visite_cliente[row,2]] + 
                visite_cliente[row,3]
    }
    Adj
            colnames
    rownames ABBAZIA DI FRUTTUARIA MUSEO EGIZIO
        1247                     1            1
        3260                     1            0
        4104                     1            0
        4145                     1            0
        5368                     1            0
        5530                     2            0
        1234                     0            1
    

    【讨论】:

    • 谢谢!我已经按照 Felipe 的建议使用了“Dcast”功能,因为它更简单,但我会保存你写的内容,因为它对未来很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多