【问题标题】:Adding Attributes to Nodes in igraph based on matrix elements基于矩阵元素为igraph中的节点添加属性
【发布时间】:2019-01-17 18:16:17
【问题描述】:

我已经创建了一个网络,并且有兴趣让节点拥有基于我最初的dataframe 的属性。例如,我的dataframe 将每个节点显示为一定数量的关键字,但这是我在创建网络的过程中丢失的信息。在这个阶段,我有兴趣将其归因于每个节点,以便稍后进行进一步分析。

图表示例:

g <- graph.formula(4506-8974, 8974-6345, 7842-4653, 4653-6345, 7842-8974)
V(g)$name <- c("4506", "8974", "6345", "7842", "4653")

额外的困难是我的dataframe 采用matrix 的形式(尽管技术上仍然是dataframe)。行是节点,列是关键字。我希望列(即关键字)成为每个节点的属性:V(g)$keyword。如果 element = 1,则显示为属性,如果 element = 0,则不考虑。 有谁知道该怎么做?我应该使用ifelse 函数吗?此外,我认为重要的是不要混淆节点 ID 的顺序,否则可能会将关键字属性赋予错误的节点。

df <- data.frame("agriculture" = c(0,1,0,0,0), "arts" = c(0,0,0,1,0), "banks" = c(1,0,1,0,0),
       "cities" = c(0,0,0,1,0), "companies" = c(0,0,0,0,1))
rownames(df) <- c("4506", "8974", "6345", "7842", "4653")

NodeID  agriculture  arts  banks  cities  companies
4506      0          0      1       0        0
8974      1          0      0       0        0
6345      0          0      1       0        0
7842      0          1      0       1        0
4653      0          0      0       0        1

 V(g)$keyword <- keyword based on if the element = 1 for each node

我希望的结果是:

V(g)$keyword[1]
[1] "banks"
V(g)$keyword[4]
[4] "arts" "cities"

【问题讨论】:

    标签: r dataframe matrix igraph


    【解决方案1】:

    以下代码几乎可以满足您的需求。不同之处在于V(g)$keyword 变成了"list"。因此,其成员的提取将与您发布的示例略有不同。

    V(g)$keyword <- apply(df, 1, function(x) names(df)[x == 1])
    
    V(g)$keyword[1]
    #[[1]]
    #[1] "banks
    
    V(g)$keyword[[1]]
    #[1] "banks"
    
    
    V(g)$keyword[4]
    #[[1]]
    #[1] "arts"   "cities"
    
    V(g)$keyword[[4]]
    #[1] "arts"   "cities"
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2015-09-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2023-01-14
      相关资源
      最近更新 更多