识别和总结 R 中的离散节点组
Identifying and summarizing discrete groups of nodes in R
我正在处理与 family/household 合成相关的网络问题。我有多个边 tables 包含 id1、id2 和一个关系代码来说明身份变量之间的关系类型。这些 table 很大,每行超过 700 万行。我还有一个节点 table,它包含相同的 ID 和各种属性。
我想要实现的是一个邻接矩阵,它将提供类似于这样的汇总统计信息:
Children
1 2 3 4 total
--------------------
1 | 1 0 1 0 2
|
Adults 2 | 3 5 4 1 13
|
3 | 1 2 0 0 3
|
total | 5 7 5 1 18
基本上我希望能够识别和计算不同的网络
在我的数据中。
我的数据格式为:
ID1 ID2 Relationship_Code
X1 X2 Married
X1 X3 Parent/Child
X1 X4 Parent/Child
X5 X6 Married
X5 X7 Parent/Child
X6 X5 Married
. . .
. . .
. . .
我还有一个节点 table,其中包含出生日期和其他可以识别 adult/child 状态的变量。
任何关于如何从图形数据框中提取此摘要信息的 tips/hints 都将非常有帮助并且非常感谢。
谢谢
获得您想要的最终 table 所需的一些工作需要
访问您没有向我们展示的节点 table,但我可以让您变得漂亮
在你的问题中走得很远。
我认为获得结果的关键是确定家庭。
您可以在 igraph
中使用 components
执行此操作。连接的组件是家庭。
我将用你的例子的一个稍微更详细的版本来说明。
数据:
Census = read.table(text="ID1 ID2 Relationship_Code
X1 X2 Married
X2 X1 Married
X1 X3 Parent/Child
X1 X4 Parent/Child
X2 X3 Parent/Child
X2 X4 Parent/Child
X5 X6 Married
X5 X7 Parent/Child
X6 X7 Parent/Child
X6 X5 Married
X8 X9 Married
X9 X8 Married",
header=T)
现在把它变成一个图表,找到组件并通过绘图检查。
library(igraph)
EL = as.matrix(Census[,1:2])
Pop = graph_from_edgelist(EL)
Households = components(Pop)
plot(Pop, vertex.color=rainbow(3, alpha=0.5)[Households$membership])
你说你可以标记节点是否代表
成人或儿童。我假设我们有这样的标签。
由此,很容易按家庭和
按家庭划分的儿童并进行 table 家庭分解
成人和儿童。
V(Pop)$AdultChild = c('A', 'A', 'C', 'C', 'A', 'A', 'C', 'A', 'A')
AdultsByHousehold = aggregate(V(Pop)$AdultChild, list(Households$membership),
function(p) sum(p=='A'))
AdultsByHousehold
Group.1 x
1 1 2
2 2 2
3 3 2
ChildrenByHousehold = aggregate(V(Pop)$AdultChild, list(Households$membership),
function(p) sum(p=='C'))
ChildrenByHousehold
Group.1 x
1 1 2
2 2 1
3 3 0
table(AdultsByHousehold$x, ChildrenByHousehold$x)
0 1 2
2 1 1 1
在我的假例子中,所有家庭都有两个成年人。
我正在处理与 family/household 合成相关的网络问题。我有多个边 tables 包含 id1、id2 和一个关系代码来说明身份变量之间的关系类型。这些 table 很大,每行超过 700 万行。我还有一个节点 table,它包含相同的 ID 和各种属性。
我想要实现的是一个邻接矩阵,它将提供类似于这样的汇总统计信息:
Children
1 2 3 4 total
--------------------
1 | 1 0 1 0 2
|
Adults 2 | 3 5 4 1 13
|
3 | 1 2 0 0 3
|
total | 5 7 5 1 18
基本上我希望能够识别和计算不同的网络 在我的数据中。
我的数据格式为:
ID1 ID2 Relationship_Code
X1 X2 Married
X1 X3 Parent/Child
X1 X4 Parent/Child
X5 X6 Married
X5 X7 Parent/Child
X6 X5 Married
. . .
. . .
. . .
我还有一个节点 table,其中包含出生日期和其他可以识别 adult/child 状态的变量。
任何关于如何从图形数据框中提取此摘要信息的 tips/hints 都将非常有帮助并且非常感谢。
谢谢
获得您想要的最终 table 所需的一些工作需要 访问您没有向我们展示的节点 table,但我可以让您变得漂亮 在你的问题中走得很远。
我认为获得结果的关键是确定家庭。
您可以在 igraph
中使用 components
执行此操作。连接的组件是家庭。
我将用你的例子的一个稍微更详细的版本来说明。
数据:
Census = read.table(text="ID1 ID2 Relationship_Code
X1 X2 Married
X2 X1 Married
X1 X3 Parent/Child
X1 X4 Parent/Child
X2 X3 Parent/Child
X2 X4 Parent/Child
X5 X6 Married
X5 X7 Parent/Child
X6 X7 Parent/Child
X6 X5 Married
X8 X9 Married
X9 X8 Married",
header=T)
现在把它变成一个图表,找到组件并通过绘图检查。
library(igraph)
EL = as.matrix(Census[,1:2])
Pop = graph_from_edgelist(EL)
Households = components(Pop)
plot(Pop, vertex.color=rainbow(3, alpha=0.5)[Households$membership])
你说你可以标记节点是否代表 成人或儿童。我假设我们有这样的标签。 由此,很容易按家庭和 按家庭划分的儿童并进行 table 家庭分解 成人和儿童。
V(Pop)$AdultChild = c('A', 'A', 'C', 'C', 'A', 'A', 'C', 'A', 'A')
AdultsByHousehold = aggregate(V(Pop)$AdultChild, list(Households$membership),
function(p) sum(p=='A'))
AdultsByHousehold
Group.1 x
1 1 2
2 2 2
3 3 2
ChildrenByHousehold = aggregate(V(Pop)$AdultChild, list(Households$membership),
function(p) sum(p=='C'))
ChildrenByHousehold
Group.1 x
1 1 2
2 2 1
3 3 0
table(AdultsByHousehold$x, ChildrenByHousehold$x)
0 1 2
2 1 1 1
在我的假例子中,所有家庭都有两个成年人。