r - 为网络分析创建对
问题描述
从我的数据集中,我试图根据排名进行配对。我的数据看起来像
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
- 如果 rank = 1 则源和目标中的 grp 相同 = grp
- 如果 rank 不同于 1 则
- 来源 = 从上一个等级中获取 grp
- 目的地 = 从当前排名中获取组 如果同一排名存在多个组,则需要创建额外的行以便表示每一对。
这看起来像下面
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
,然后遍历给定组的每一行。然后对于每一行,我们根据您的规则构建一个新的数据框。
推荐阅读
- android - Android Emulator 不使用我从 Xamarin AndroidDeviceManager 提供的 RAM
- angular - Angular 中的服务/API 调用
- node.js - 有没有办法查看我的文件是如何编辑的 - node.JS
- php - 如何在 wordpress 中使用 paginate_links 而不会出现 404 错误?
- python - 如何在每个测试对由 [0 1] 组成的情况下“排除对”
- autodesk-forge - Forge 查看器在 2D 视图中显示模糊的元素,并且 Measure 扩展对它们不起作用
- angular - Ionic - Angular 9:无法消化 Swiper 回调
- python - 用户使用 Flask python 登录后显示注销按钮
- javascript - 道具React发生变化时如何渲染组件?
- python - Jinja 中的变量 - Flask