为网络分析创建对
creating pairs for network analysis
从我的数据集中,我试图根据排名进行配对。我的数据看起来像
ID grp rank
1 grp1 1
1 grp2 1
1 grp3 2
2 grp1 1
2 grp2 2
2 grp2 2
2 grp2 2
2 grp3 2
2 grp1 3
我的目标输出如下:
对于每个 ID
- if rank = 1 then grp in source and destination are same = grp
- 如果等级不等于 1 那么
- source = 从之前的 rank 中获取 grp
- destination = 从当前排名开始
如果同一排名存在多个组,则需要创建一条额外的线,以便代表每一对。
这看起来像下面这样
ID rank source destination
1 1 grp1 grp1
1 1 grp2 grp2
1 2 grp1 grp3
1 2 grp2 grp3
2 1 grp1 grp1
2 2 grp1 grp2
2 2 grp1 grp2
2 2 grp1 grp2
2 2 grp1 grp3
2 3 grp2 grp1
2 3 grp3 grp1
我从 for 循环和 if_else 语句开始,但我卡住了。任何帮助表示赞赏!提前谢谢。
我们可能会做以下事情:
df %>% group_by(ID) %>%
do(map_dfr(1:nrow(.), function(i)
data.frame(.[i, -2], source = if(.$rank[i] == 1) .$grp[i] else unique(.$grp[.$rank == .$rank[i] - 1]),
destination = .$grp[i])))
# A tibble: 11 x 4
# Groups: ID [2]
# ID rank source destination
# <int> <int> <fct> <fct>
# 1 1 1 grp1 grp1
# 2 1 1 grp2 grp2
# 3 1 2 grp1 grp3
# 4 1 2 grp2 grp3
# 5 2 1 grp1 grp1
# 6 2 2 grp1 grp2
# 7 2 2 grp1 grp2
# 8 2 2 grp1 grp2
# 9 2 2 grp1 grp3
# 10 2 3 grp2 grp1
# 11 2 3 grp3 grp1
我们按 ID
分组,然后遍历给定组的每一行。然后我们根据您的规则为每一行构建一个新的数据框。
从我的数据集中,我试图根据排名进行配对。我的数据看起来像
ID grp rank
1 grp1 1
1 grp2 1
1 grp3 2
2 grp1 1
2 grp2 2
2 grp2 2
2 grp2 2
2 grp3 2
2 grp1 3
我的目标输出如下: 对于每个 ID
- if rank = 1 then grp in source and destination are same = grp
- 如果等级不等于 1 那么
- source = 从之前的 rank 中获取 grp
- destination = 从当前排名开始 如果同一排名存在多个组,则需要创建一条额外的线,以便代表每一对。
这看起来像下面这样
ID rank source destination
1 1 grp1 grp1
1 1 grp2 grp2
1 2 grp1 grp3
1 2 grp2 grp3
2 1 grp1 grp1
2 2 grp1 grp2
2 2 grp1 grp2
2 2 grp1 grp2
2 2 grp1 grp3
2 3 grp2 grp1
2 3 grp3 grp1
我从 for 循环和 if_else 语句开始,但我卡住了。任何帮助表示赞赏!提前谢谢。
我们可能会做以下事情:
df %>% group_by(ID) %>%
do(map_dfr(1:nrow(.), function(i)
data.frame(.[i, -2], source = if(.$rank[i] == 1) .$grp[i] else unique(.$grp[.$rank == .$rank[i] - 1]),
destination = .$grp[i])))
# A tibble: 11 x 4
# Groups: ID [2]
# ID rank source destination
# <int> <int> <fct> <fct>
# 1 1 1 grp1 grp1
# 2 1 1 grp2 grp2
# 3 1 2 grp1 grp3
# 4 1 2 grp2 grp3
# 5 2 1 grp1 grp1
# 6 2 2 grp1 grp2
# 7 2 2 grp1 grp2
# 8 2 2 grp1 grp2
# 9 2 2 grp1 grp3
# 10 2 3 grp2 grp1
# 11 2 3 grp3 grp1
我们按 ID
分组,然后遍历给定组的每一行。然后我们根据您的规则为每一行构建一个新的数据框。