如何解决创建网络变量以捕获通过 R
我有一个数据框,其中包括校长、他们工作的学校以及他们在那里工作的年数。我想创建一个新变量(网络)来表示他们所处的比较“网络”。在这里,网络对于在不同年份在同一所学校工作的任何校长都具有相同的值或 strong> 在另一所学校工作的任何其他校长,该学校的校长也曾在该学校工作,以及所有其他校长也在该学校工作或在另一所学校工作的校长,该校长来自那所学校也有工作,等等。网络也可以在学校层面进行定义,其中网络是一组学校,其中每所学校在数据中的年份中至少有一名校长调到网络中的至少一所其他学校。
从本质上讲,该变量应该“连接”任何通过他们工作过的学校建立联系的校长,以便最终可以在增值模型中将他们相互比较。每个委托人都有一个唯一的网络值。
这是一个(非常)简化的数据框来表示数据结构:
library(tidyverse)
library(data.table)
#basic data
ps <- data.frame(principal = rep(letters[1:5],each = 4),year=rep(1:4))
recode_if <- function(x,condition,...) {
if_else(condition,recode(x,...),x)
}
#add in schools and then create some variation to demonstrate different ways to connect
ps <- ps %>%
mutate(school = fcase(
principal=="a","fhs",principal=="b","ghs",principal=="c","lms",principal=="d","pms",principal=="e","ehs",default=NA_character_)) %>%
mutate(school = recode_if(school,principal=="b" & year>=2,"ghs"="lms")) %>%
mutate(school = recode_if(school,principal=="c" & year>=2,"lms"="tms")) %>%
mutate(school = recode_if(school,principal=="d" & year>=4,"pms"="ehs")) %>%
mutate(school = recode_if(school,principal=="e" & year>=4,"ehs" = NA_character_))
在上面的例子中,校长 a 将在他们自己的网络中,因为他们没有在 fhs 以外的任何学校工作过,这个数据集中的任何其他校长也没有在 fhs 工作过。主体 b 和 c 将具有相同的网络值,通过 lms 连接。没有其他负责人会在该网络中,因为没有其他人在 ghs、lms 或 tms 工作过。主体 d 和 e 将在同一个网络中,通过 ehs 连接。
我曾尝试探索社交网络分析领域,但运气不佳,尽管我之前从未处理过此类数据,因此答案可能就在那里!我也尝试了一些不同的循环方法,但也无法正常工作。
任何帮助将不胜感激!非常感谢!
解决方法
这是一种使用 tidygraph
的方法,它是 igraph
的包装器。
# Show all links where two principals worked at same school (incl self-joins)
ps %>%
left_join(ps,by = "school") %>%
select(principal.x,principal.y) -> links
library(tidygraph)
links %>%
as_tbl_graph(directed = FALSE) %>%
mutate(group = group_components()) %>%
activate(nodes) %>%
data.frame()
# name group
#1 a 3
#2 b 1
#3 c 1
#4 d 2
#5 e 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。