我正在寻找一个'description'变量到顶点数据框中,该变量描述在其中找到节点的群集。我的网络是家庭关系,因此群集可能是一个有两个成年人和两个孩子的家庭,有三个孩子的单亲家庭,夫妇等。
我的数据看起来像
Vertices data frame
ID Date.Of.B Nationality
X1 02/05/1995 Ugandan
X2 10/10/2010 Ugandan
X3 15/12/1975 Irish
: : :
边缘列表
ID1 ID2
X1 X2
X1 X3
X2 X3
X3 X1
: :
我计划创建因子水平来描述聚类,即
2 adults = 2A
2 adults 2 children = 2A2C
5 adults 0 children = 5A
使用 graph_from_data_frame()创建图后,我可以使用 componets()和 components $ membership 提取组件,为每个群集分配成员资格ID为 components $ membership 的属性的数字。我可以在每个顶点上贴上标签,以确定它们是成人还是儿童。
基本上,我正在寻找添加另一个变量,该变量将给定所在群集的每个ID归类:
新顶点数据框
ID Date.Of.B Nationality Class
X1 02/05/1995 Ugandan 2A1C
X2 10/10/2010 Ugandan 2A1C
X3 15/12/1975 Irish 2A1C
: : :
我认为我将必须使用某种循环遍历每个群集,并通过 component $ membership
将一个级别应用于每个顶点这是我想到的一个选项,目前正在研究中。
如果您还有其他想法或更好的方法,请告诉我。
谢谢
答案 0 :(得分:0)
也许这会有所帮助:
library(igraph)
library(dplyr)
library(tidyr)
生成示例数据:
set.seed(1)
vertices <- data.frame(ID = 1:20,
date = as.character(rnorm(20, -5000, 3000) + Sys.Date()),
Nationality = letters[1:20])
edgelist <- data.frame(from = sample(1:20, 15, replace = T),
to = sample(1:20, 15, replace = T))
g <- graph_from_data_frame(edgelist,
directed = F,
vertices = vertices)
cp <- components(g)
将组件成员身份另存为新的顶点属性:
V(g)$components <- membership(cp)
提取顶点以及其他属性:
df <- get.data.frame(g, "vertices")
使用数据框: 首先根据年龄(以天为单位)生成一个新的编码变量,计算发生次数并将结果粘贴到一个新变量中。
df <- df %>%
mutate(coding = ifelse(Sys.Date() - as.Date(df$date) > 6570, "A", "C")) %>%
group_by(components, coding) %>%
mutate(n = n()) %>%
ungroup() %>%
mutate(new = paste(n, coding, sep = "")) %>%
select(-coding, -n)
然后将基于组件的数据框嵌套到新的数据框中,并删除重复项。
df2 <- df %>%
select(new, components) %>%
distinct(.keep_all = T) %>%
nest(-components)
此后,您可以合并两个数据帧并循环(sapply
)以取消列出新的类变量(在本例中为data
),这也是您的最终结果。
df3 <- left_join(df, df2) %>%
select(-new)
df3$data <- sapply(df3$data, function(x) paste(unname(unlist(x)), collapse = ""))