在 R(或 Stata)中按组组合行

Combine rows per groups in R (or Stata)

我在 R(或 Stata)中遇到无法解决的问题。我有一个数据库,示例如下:

Year ID Firm Group
2000 1 1 1
2000 2 1 1
2000 3 2 2
2000 4 2 2
2000 5 2 2
2000 6 3 3
2001 1 1 4
2001 2 1 4
2001 3 1 4
2001 4 2 5
2001 5 2 5
2001 6 3 6

我需要一份同一组内 ID 交互的列表(即:在给定年份在同一家公司工作)以进行网络分析。 类似于以下内容:

Year ID Firm Group Interactions_A Interactions_B
2000 1 1 1 1 2
2000 2 1 1 3 4
2000 3 2 2 3 5
2000 4 2 2 4 5
2000 5 2 2 6
2000 6 3 3
2001 1 1 4 1 2
2001 2 1 4 1 3
2001 3 1 4 2 3
2001 4 2 5 4 5
2001 5 2 5 6
2001 6 3 6

是否有任何建议可以在 R 中执行此操作(也可以在 Stata 中)?

非常感谢您的帮助!

在R中可以先得到每组ID之间的所有组合,然后格式化数据得到每个节点一列。

library(tidyverse)

dat %>% 
  group_by(Group) %>% 
  summarise(new = ifelse(n() > 1, paste(combn(ID, 2), collapse = "-"), as.character(ID))) %>% 
  separate_rows(new, sep = "(?:[^-]*(?:-[^-]*){1})\K-") %>% 
  separate(new, into = c("Interactions_A", "Interactions_B"))

   Group Interactions_A Interactions_B
   <int> <chr>          <chr>         
 1     1 1              2             
 2     2 3              4             
 3     2 3              5             
 4     2 4              5             
 5     3 6              NA            
 6     4 1              2             
 7     4 1              3             
 8     4 2              3             
 9     5 4              5             
10     6 6              NA 

数据

dat <- read.table(header= T, text = "Year   ID  Firm    Group
2000    1   1   1
2000    2   1   1
2000    3   2   2
2000    4   2   2
2000    5   2   2
2000    6   3   3
2001    1   1   4
2001    2   1   4
2001    3   1   4
2001    4   2   5
2001    5   2   5
2001    6   3   6")