【发布时间】:2019-05-12 20:21:07
【问题描述】:
所以我目前有一个代表如下社交网络的数据框:
id age id1 id2 id3
01 14 02 05 03
02 23 01 05 03
03 52 04 01 02
04 41 03
05 32 01 02
理想情况下,我想要一个如下所示的新数据框:
id age id1 id2 id3 Connections
01 14 02 05 03 3
02 23 01 05 03 3
03 52 04 01 02 3
04 41 03 1
05 32 01 02 2
使用新变量表示“id”具有的连接数。截至目前,我目前有如下代码:
links <- df
links <- as.matrix(links)
links <- as.data.frame(rbind(links[,c(1,3)], links[,c(1,4)]), links[,c(1,5)])
head(links)
library(igraph)
g = graph.data.frame(links)
m = as.matrix(get.adjacency(g))
m
pmax(rowSums(m), colSums(m))
这给了我:
1 2 3 4 5 NA
3 3 3 1 2 3
然后如何将其合并到数据框中以创建“连接”变量?理想情况下,我的其他数据最多包含 50 个连接,因此我想要一种更简单的方法,无需重新创建数据框。
【问题讨论】:
-
也许吧?
df$connections <- rowSums(!is.na(df[, c("id1", "id2", "id3")]))或更灵活:df$connections <- rowSums(!is.na(df[, grepl("id[0-9]+", names(df)]))