r - 在 R 中,如何找到给定数据框中的连接数并生成一个表示它的变量?
问题描述
所以我目前有一个代表社交网络的数据框,如下所示:
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 个连接,因此我想要一种更简单的方法,无需重新创建数据框。
解决方案
像这样的东西怎么样:
首先,使用
regex
我们确定与连接对应的列# here connections columns must contain the pattern "id"+digit(s) connectionsNames <- grepl("id\\d+", names(df), perl = TRUE)
然后我们使用
rowSums
创建新列df$connections <- sum(connectionsNames) - rowSums(is.na(df))
这里的结果
df id age id1 id2 id3 connections 1 1 1 1 1 1 3 2 2 1 2 2 2 3 3 3 1 3 3 NA 2 4 4 1 4 NA NA 1
推荐阅读
- jenkins - 如何通过 groovy 工作流程从登录的用户 id 中获取 jenkins 中的角色名称
- pjsip - 我应该在后台线程中调用 pjsua_call_make_call (pj::Call::makeCall) 吗?
- xslt - XSLT 标记插入
- javascript - 如何在选择框下拉列表中突出显示某些值,第一次扩展列表
- python - 查找正确的正则表达式以匹配模式并在 python 中提取子字符串
- c - C write() 时间不一致
- google-bigquery - 将某一列中的值替换为具有特定条件 BQ 的同一行中另一列中的值
- c# - GridView 中的数据绑定表达式
- android - Android:RecyclerView 随机改变高度
- python - 无法在 Python 上使用 Selenium 在弹出窗口上定位元素