r - 将 2 个数据框组合在一起,将一个社交网络创建为 R 中的 1 个更大的数据框
问题描述
所以,我目前有两个数据框。一个包含给定网络的节点信息,它看起来像这样:
id age
01 14
02 23
03 52
04 41
05 32
另一个数据框包含节点之间连接的信息,如下所示:
id1 id2
01 02
01 05
03 04
05 02
因此,鉴于这两个数据框,我想要做的是以这样的方式组合它们,使得生成的数据框看起来像第一个,但现在对于节点具有的每个连接都有列以及包含连接数的列该节点有(假设它从不超过5)。所以它看起来像这样:
id age friend1 friend2 Connections
01 14 02 05 2
02 23 01 05 2
03 52 04 1
04 41 03 1
05 32 01 02 2
解决方案
将第二个 data.frame 转换为邻接矩阵可能会更好。
# DATA
df1 = structure(list(id = c("01", "02", "03", "04", "05"), age = c(14,
23, 52, 41, 32)), class = "data.frame", row.names = c(NA, -5L))
df2 = structure(list(id1 = c("01", "01", "03", "05"), id2 = c("02",
"05", "04", "02")), class = "data.frame", row.names = c(NA, -4L))
library(igraph)
g = graph.data.frame(df2)
m = as.matrix(get.adjacency(g))
m
# 01 03 05 02 04
#01 0 0 1 1 0
#03 0 0 0 0 1
#05 0 0 0 1 0
#02 0 0 0 0 0
#04 0 0 0 0 0
pmax(rowSums(m), colSums(m)) #Total Connections
#01 03 05 02 04
# 2 1 1 2 1
#Add a column for age
mydat = as.data.frame(m)
mydat$id = row.names(mydat)
merge(mydat, df1, by = "id")
# id 01 03 05 02 04 age
#1 01 0 0 1 1 0 14
#2 02 0 0 0 0 0 23
#3 03 0 0 0 0 1 52
#4 04 0 0 0 0 0 41
#5 05 0 0 0 1 0 32
推荐阅读
- javascript - 在 React 中更新全局变量/状态
- kotlin - NoSuchElementException 的根本原因:集合为空
- powershell - 在 VSO 版本中,Powershell 任务在使用“Azure Pipelines”代理时失败,而在使用“Hosted MSIT Fortify 2017”代理时相同的任务正在通过
- linux - 通讯命令不比较单词
- sql-server - 复制整行不包括标识符列
- python - 如何在 Excel 中替换字符串并检查整个单元格字符串?
- php - 换行进入数据库
- r - r - 如何给地图/土地区域着色,给定2个类别的点?
- logging - 解决 Microsoft.Extensions.Logging ILogger 而不是 ILogger
使用 Autofac 和 SeriLog - dataframe - 将单引号添加到 dataFrame 列值