r - 获取网络R中的友谊时间长度
问题描述
我有一个超过 7 波的青少年友谊网络数据集。我正在尝试获取给定二元组(定向友谊)的长度。
样本数据:
ego alter wave
1 5 1
1 4 1
1 5 2
1 2 2
1 3 2
2 8 1
2 8 2
2 8 3
3 4 1
3 7 1
3 6 1
3 6 2
3 7 3
3 6 3
想要的数据:
ego alter friendship_length
1 5 2
1 4 1
1 2 1
1 3 1
2 8 3
3 4 1
3 7 1
3 6 3
这是我已经尝试过的:
edges_wide <- edges_long %>%
select(ego, alter, wave) %>%
group_by(ego, alter) %>%
mutate(col=seq_along(ego))%>% # add a column indicator
spread(key=col, value=wave)
这给了我这个:
ego alter col3 col4 col5
1 5 1 2 NA
1 4 1 NA NA
1 2 2 NA NA
1 3 2 NA NA
2 8 1 2 3
3 4 1 NA NA
3 7 1 3 NA
3 6 1 2 3
从这里我不确定如何获得定向友谊的波跨度(长度),包括不计算非连续提名(如 ego 3 alter 7)。
解决方案
应该有可能有一个更短的解决方案。
如果我理解正确,您只想计算alter 和ego 有关系的后续波的第一次出现。因此,我们可以添加一个组 id row_number()
,针对有时波在 1 之后开始的事实进行调整min(wave)-1
,然后只计算wave
与修改后的id
一致的观察值。对于给定的一对,一旦数据中跳过一个波,两个索引就会不同。
d %>%
arrange(wave) %>%
group_by(ego, alter) %>%
mutate(id = row_number() + min(wave) - 1) %>%
summarise(friendship_lenght = sum(wave==id))
# A tibble: 8 x 3
# Groups: ego [3]
ego alter friendship_lenght
<int> <int> <int>
1 1 2 1
2 1 3 1
3 1 4 1
4 1 5 2
5 2 8 3
6 3 4 1
7 3 6 3
8 3 7 1
编辑
解决新评论。我们要计算连续友谊关系的最长持续时间。row_number()
可用于成对创建唯一的友谊阶段 ID。第一个连续波中的友谊都将被赋予相同的整数,对于所有后续连续的友谊,依此类推。因此,我们可以计算每个整数出现的次数,并取最大值:
dd %>%
arrange(wave) %>%
group_by(ego, alter) %>%
count(wave - row_number() ) %>%
summarise(friendship_lenght = max(n))
# A tibble: 9 x 3
# Groups: ego [3]
ego alter friendship_lenght
<int> <int> <dbl>
1 1 2 1
2 1 3 1
3 1 4 1
4 1 5 2
5 2 8 3
6 3 4 1
7 3 6 3
8 3 7 1
9 3 8 3
数据
library(dplyr)
d <- read.table(text = "
ego alter wave
1 5 1
1 4 1
1 5 2
1 2 2
1 3 2
2 8 1
2 8 2
2 8 3
3 4 1
3 7 1
3 6 1
3 6 2
3 7 3
3 6 3", header=T)
dd <- read.table(text = "
ego alter wave
1 5 1
1 4 1
1 5 2
1 2 2
1 3 2
2 8 1
2 8 2
2 8 3
3 4 1
3 7 1
3 6 1
3 6 2
3 7 3
3 6 3
3 8 2
3 8 3
3 8 8
3 8 6
3 8 7", header=T)
推荐阅读
- sql - SQL 以多个值结尾
- c++ - Clang vs Clang tidy 是否检测到相同的警告和错误?
- python - 在脚本期间刷新 Maya UI?
- python - 在调用期间修补 pathlib 并测试字符串
- java - XPath:查找具有两个条件的节点
- azure - 在 Azure DSVM 上创建和使用自定义 Anaconda 环境
- mysql - 在 where 子句中使用 case 语句或构造动态查询是否更好
- javascript - 如何在 Google Maps api 上更新或强制重绘标记集群图标?
- python - 尝试从瓶颈层矢量化灰度图像
- javascript - 在 React propType 定义中使用导入的模块