Объединить строки в группы в R (или Stata)

У меня есть проблема в R (или Stata), которую я не могу решить. У меня есть база данных, как показано ниже:

ГодЯ БЫТвердыйГруппа
2000 г.111
2000 г.211
2000 г.322
2000 г.422
2000 г.522
2000 г.633
2001 г.114
2001 г.214
2001 г.314
2001 г.425
2001 г.525
2001 г.636

Мне потребуется список взаимодействий идентификаторов в одной группе (т. е. работа в одной фирме в определенный год) для сетевого анализа. Что-то вроде следующего:

ГодЯ БЫТвердыйГруппаВзаимодействия_AВзаимодействия_B
2000 г.11112
2000 г.21134
2000 г.32235
2000 г.42245
2000 г.5226
2000 г.633
2001 г.11412
2001 г.21413
2001 г.31423
2001 г.42545
2001 г.5256
2001 г.636

Есть ли предложения сделать это в R (также можно в Stata)?

Большое спасибо за вашу помощь!

С dplyr left_join(x,x, by = c("Firm", "Year") даст вам старт.

dash2 18.03.2022 12:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В R вы можете сначала получить все комбинации между идентификаторами каждой группы, а затем отформатировать данные, чтобы получить один столбец для каждого узла.

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")

большое спасибо за вашу помощь! Вы молодец, решение кажется именно тем, что мне нужно. Сейчас я пытаюсь работать с большим набором данных, который, как и ожидалось, занимает много времени. Я получаю сообщение об ошибке "результат превысит 2 ^ 31-1 байт". Я попытаюсь выяснить это, возможно, с меньшими наборами данных, но это должно работать, как в образце. Большое спасибо!

José 18.03.2022 13:43

В больших группах количество комбинаций растет экспоненциально, поэтому вы быстро получаете слишком много строк. Это может означать, что это не правильный подход.

Maël 18.03.2022 14:30

Точно, ты прав. Решение именно то, что мне нужно, но, к сожалению, это невозможно в очень больших наборах данных. Спасибо еще раз!

José 18.03.2022 14:45

Другие вопросы по теме