首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建用于网络分析的对

创建用于网络分析的对
EN

Stack Overflow用户
提问于 2018-12-18 08:33:57
回答 1查看 137关注 0票数 2

根据我的数据集,我试图根据排名来做对。我的数据看起来

代码语言:javascript
复制
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

  • 如果秩=1,则源和目的地的grp是相同的= grp。
  • 如果秩与1不同,则
    • 来源=从前一级别取grp
    • 从当前排名中提取组,如果同一排名存在多个组,则需要创建一条额外的行,以便表示每一对。

这看起来如下所示

代码语言:javascript
复制
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语句开始,但是我被卡住了。任何帮助都是非常感谢的!提前结束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 10:20:54

我们可以采取以下措施:

代码语言:javascript
复制
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分组,然后遍历给定组的每一行。然后,对于每一行,我们根据您的规则构造一个新的数据框架。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53829063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档