我真的需要帮助编写代码,以便从数据集创建加权邻接矩阵;有些行包含1到2个成分,但其他行包含更多(最多8个).根据数据集中独特成分的数量,得到的矩阵可能会超过16x16.

我的数据目前类似于下面的示例(但信息不同).对于这个网络分析来说,成分出现在哪一列并不重要,但共现和权重才是重要的.

name1 name2 name3 name4 name5 name6 name7 name8
pineapple sugar mango water salt blueberry
pineapple asca
sugar pineapple water lime
lime asca pepper salt water
blueberry pineapple water salt strawberry banana asca sugar
mango

我如何编写代码,以便它将从所有列中找到所有的共现/边,而不仅仅是前两列?这是我try 直接在R中从这些数据进行邻接矩阵时遇到的一个问题.我还需要保留 node (成分)的名称,以便在创建网络图时,名称将显示出来,而不是数字,这是我遇到的另一个问题.

我有可靠的代码为这个新项目从邻接矩阵创建网络图,但之前我手动计算了样本集的加权邻接矩阵,因为我的最后期限很紧.

推荐答案

如果需要逐行事件,您可以通过@ThomsIsCoding修改答案:

m <- tcrossprod(table(stack(as.data.frame(t(df))))[-1,])
m
#>             values
#> values       asca banana blueberry lime mango pepper pineapple salt strawberry sugar water
#>   asca          3      1         1    1     0      1         2    2          1     1     2
#>   banana        1      1         1    0     0      0         1    1          1     1     1
#>   blueberry     1      1         2    0     1      0         2    2          1     2     2
#>   lime          1      0         0    2     0      1         1    1          0     1     2
#>   mango         0      0         1    0     2      0         1    1          0     1     1
#>   pepper        1      0         0    1     0      1         0    1          0     0     1
#>   pineapple     2      1         2    1     1      0         4    2          1     3     3
#>   salt          2      1         2    1     1      1         2    3          1     2     3
#>   strawberry    1      1         1    0     0      0         1    1          1     1     1
#>   sugar         1      1         2    1     1      0         3    2          1     3     3
#>   water         2      1         2    2     1      1         3    3          1     3     4

如果需要,可以将主对角线设置为0.

diag(m) <- 0
m
#>             values
#> values       asca banana blueberry lime mango pepper pineapple salt strawberry sugar water
#>   asca          0      1         1    1     0      1         2    2          1     1     2
#>   banana        1      0         1    0     0      0         1    1          1     1     1
#>   blueberry     1      1         0    0     1      0         2    2          1     2     2
#>   lime          1      0         0    0     0      1         1    1          0     1     2
#>   mango         0      0         1    0     0      0         1    1          0     1     1
#>   pepper        1      0         0    1     0      0         0    1          0     0     1
#>   pineapple     2      1         2    1     1      0         0    2          1     3     3
#>   salt          2      1         2    1     1      1         2    0          1     2     3
#>   strawberry    1      1         1    0     0      0         1    1          0     1     1
#>   sugar         1      1         2    1     1      0         3    2          1     0     3
#>   water         2      1         2    2     1      1         3    3          1     3     0

生效日期:

df <- data.table::fread("name1  name2   name3   name4   name5   name6   name7   name8
               pineapple    sugar   mango   water   salt    blueberry       
               pineapple    asca                        
               sugar    pineapple   water   lime                
               lime asca    pepper  salt    water           
               blueberry    pineapple   water   salt    strawberry  banana  asca    sugar
               mango                            ")

R相关问答推荐

在R中,将一个函数作为输入传递给另一个函数时进行参数判断

按自定义数字模式对变量名称排序

如何使用ggplot重新绘制LASO回归图?

咕噜中的元素列表:map

r—绘制相交曲线

selectInput不返回ALL,并将因子转换为shiny 的数字

使用tidy—select创建一个新的带有mutate的摘要变量

将包含卷的底部25%的组拆分为2行

如何在一次运行中使用count进行多列计数

如何计算多个日期是否在一个日期范围内

多个过滤器内的一个盒子在仪表板Quarto

R中的时间序列(Ts)函数计数不正确

多个模拟序列间的一种预测回归关系

矩阵的堆叠条形图,条形图上有数字作为标签

R Select()可以测试不存在的子集列

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

从R中的对数正态分布生成随机数的正确方法

R -在先前group_by级别汇总时获取最大大小子组的计数

在散点图中使用geom_point放置线图例

抽样变换-REXP与RWEIBUR