我有不同时间在不同医院工作的医生的信息。我想定义医院月级的网络,这样同龄人就是在同一家医院一起工作的医生。由于医生可以同时在多家医院工作,网络组部分重叠。
那么,我想在月份级别上计算结果网络的基本描述(例如平均程度、密度、聚类),以查看这些参数随时间的变化。
考虑非常简单的例子,医院x-y-w,周期1-2和医生A-B-C-D。
H 19医生C和D在医院工作在第1期H 210H 111医生A和D在医院的工作在第2期<代码>H 212F 213
在下面的dataframe中表示了这一点。
mydf <- data.frame(hospital = c("x","x","x","x","x","y","y","y","w","w","w","w"),
period = c(1,1,1,2,2,1,2,2,1,1,2,2),
physician = c("A","B","C","A","B","A","A","C","C","D","A","D"))现在,我已经编写了下面的代码。首先,我在一个给定的医院月中与每一位医生一起构建一个数据框架.第二,我对每段时间的对进行过滤。第三,我为每段时间定义了一个define对象。第四,我绘制图表并计算每个时期的描述性统计数据(例如密度)。有更简单的方法吗?如果不是,我如何能够在多个时期内自动执行这段代码?
relations <- mydf %>%
rename(from = physician) %>%
left_join(mydf, by=c("hospital","period")) %>%
rename(to = physician) %>%
filter(from!=to) %>%
relocate(from, to)
relations_1 <- relations %>%
filter(period==1)
relations_2 <- relations %>%
filter(period==2)
g1 <- simplify(graph_from_data_frame(relations_1, directed=FALSE, vertices=NULL))
g2 <- simplify(graph_from_data_frame(relations_2, directed=FALSE, vertices=NULL))
plot(g1)
plot(g2)
degree(g1)
degree(g2)发布于 2021-05-22 20:38:37
更新
可以使用以下代码创建g1、g2、degree1和degree2
rlst <- split(relations, relations$period)
for (i in seq_along(rlst)) {
assign(paste0("g", i), simplify(graph_from_data_frame(rlst[[i]], directed = FALSE, vertices = NULL)), envir = .GlobalEnv)
assign(paste0("degree", i), degree(get(paste0("g", i))), envir = .GlobalEnv)
}你是说这个吗?
relations %>%
group_by(period) %>%
group_map(~ degree(simplify(graph_from_data_frame(.x, directed = FALSE))))这给
[[1]]
A B C D
2 2 3 1
[[2]]
A B C D
3 1 1 1 https://stackoverflow.com/questions/67651866
复制相似问题