r - 创建网络变量以捕获通过 R 中的分组变量直接和间接连接的观察结果
问题描述
我有一个数据框,其中包括校长、他们工作的学校以及他们在那里工作的年限。我想创建一个新变量(网络)来表示他们所处的比较“网络”。在这里,网络对于在同一所学校工作的不同年份的任何校长或任何其他工作的校长都具有相同的值在另一所学校,该学校的校长也曾在该学校工作,以及所有其他也在该学校工作的校长,或在另一所学校工作的任何其他校长,该学校的校长也曾在该学校工作,依此类推。网络也可以在学校级别定义,其中网络是一组学校,其中每所学校在数据中的年份中至少有一名校长转移到网络中的至少一所其他学校。
从本质上讲,该变量应该“连接”通过他们工作过的学校联系的所有校长,以便最终可以在增值模型中将他们相互比较。每个委托人都有一个独特的网络价值。
这是一个(非常)简化的数据框来表示数据结构:
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
推荐阅读
- c - For循环在不应该的时候向后打印,解决方案有什么输入吗?
- python - 如何将 JSON 数据从 postman 推送到 django 框架
- angular - 对 WordPress 网站的 Angular HTTP 请求
- ruby - RubyMine 在 Ubuntu 上找不到 Ruby SDK
- python-3.x - 在python pandas的数据库表中一一加载相同的数据文件
- python - 如何在每次调用函数时缓存函数结果并更新缓存值?
- jquery - jQuery.eCalendar() - 仅在点击日期时显示事件
- python - 不允许我读取 msg 文件的 com_error
- java - 表格中的数据未正确显示,JavaFx 使用 SQLite
- c# - 如何在 WPF 应用程序运行时修改绑定路径