首页 > 解决方案 > 在 R 中,如何找到给定数据框中的连接数并生成一个表示它的变量?

问题描述

所以我目前有一个代表社交网络的数据框,如下所示:

id age  id1    id2   id3   
01  14  02      05    03        
02  23  01      05    03        
03  52  04      01    02        
04  41  03                      
05  32  01      02              

理想情况下,我想要一个新的数据框,如下所示:

id age  id1    id2   id3   Connections
01  14  02      05    03        3
02  23  01      05    03        3
03  52  04      01    02        3
04  41  03                      1
05  32  01      02              2  

使用新变量表示“id”具有的连接数。截至目前,我目前有如下代码:

links <- df
links <- as.matrix(links)
links <- as.data.frame(rbind(links[,c(1,3)], links[,c(1,4)]), links[,c(1,5)])
head(links)

library(igraph)
g = graph.data.frame(links)
m = as.matrix(get.adjacency(g))
m
pmax(rowSums(m), colSums(m))

这给了我:

 1  2  3  4  5 NA 
 3  3  3  1  2  3 

然后如何将其合并到数据框中以创建“连接”变量?理想情况下,我的其他数据最多包含 50 个连接,因此我想要一种更简单的方法,无需重新创建数据框。

标签: rdataframeigraph

解决方案


像这样的东西怎么样:

  • 首先,使用regex我们确定与连接对应的列

    # here connections columns must contain the pattern "id"+digit(s)
    connectionsNames <- grepl("id\\d+", names(df), perl = TRUE)
    
  • 然后我们使用rowSums创建新列

    df$connections <- sum(connectionsNames) - rowSums(is.na(df))
    
  • 这里的结果

    df
      id age id1 id2 id3 connections
    1  1   1   1   1   1           3
    2  2   1   2   2   2           3
    3  3   1   3   3  NA           2
    4  4   1   4  NA  NA           1
    

推荐阅读