我有一个学校的网络数据集,其中我有每个受访者的抑郁水平。数据如下所示:
id depression friendid_1 friendid_2 friendid_2 friendid_3
1 1.0 7 3 6 5
2 0.6 6 4 NA NA
3 0.0 1 4 5 7
4 1.8 9 3 8 2
我想在数据中添加一个变量,即受访者网络的平均抑郁水平(因此,对所有作为受访者存在于此数据中的变更者的抑郁水平进行平均)。
任何帮助都是最好的!
发布于 2018-04-19 03:40:50
对于这些类型的“连接”问题,我喜欢使用igraph
包来处理数据,就像处理图形/网络一样。所以有了你的样本数据
dd<-read.table(text="id depression friendid_1 friendid_2 friendid_3 friendid_4
1 1.0 7 3 6 5
2 0.6 6 4 NA NA
3 0.0 1 4 5 7
4 1.8 9 3 8 2", header=TRUE)
我们可以使用以下工具创建您的数据图表
library(igraph)
library(dplyr) #for select
library(tidyr) #for gathter
gg <- dd %>% select(-depression) %>%
gather(friend, friend_id, -id) %>%
select(-friend) %>%
na.omit() %>%
graph_from_data_frame(, directed=FALSE) %>% #this assumes friendships are mutual
simplify()
gg <- set_vertex_attr(gg, "depression", V(gg)[dd$id], dd$depression)
plot(gg)
然后,您可以遍历所有顶点并计算相邻顶点的平均凹陷
sapply(V(gg), function(v) {
mean(neighbors(gg, v)$depression, na.rm=TRUE)
})
# 1 2 3 4 7 6 9 5 8
# 0.0 1.8 1.4 0.3 0.5 0.8 1.8 0.5 1.8
https://stackoverflow.com/questions/49907572
复制相似问题