Создать команду вставки по уникальным идентификаторам - PullRequest
0 голосов
/ 13 марта 2019

У меня есть сетевой анализ, но я застрял с ним. У меня есть многочисленные (более 26 000) идентификаторов проектов с различным количеством участников (от 1 до 193 по проектам). Для анализа сети мне нужно связать участников друг с другом уникальными проектами. Например:

Example

То, что я хочу увидеть:

What i want to see

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

Я пробовал с некоторыми для циклов, но я не мог заставить его работать.

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Мы можем использовать tidyverse. После группировки по 'project_id', paste first 'member_id' с остальными в list, unnest и удаление столбца 'project_id' с select

library(dplyr)
library(tidyr)
df1 %>% 
  group_by(project_id) %>%
  summarise(newcol = list(paste(first(participant_id), 
                  participant_id[-1], sep="."))) %>% 
  unnest %>%
  select(-project_id)
# A tibble: 6 x 1
#  newcol 
#  <chr>  
#1 s01.s02
#2 s01.s05
#3 s02.s03
#4 s02.s06
#5 s02.s09
#6 s10.s19

Данные

df1 <- structure(list(project_id = c(1, 1, 1, 2, 2, 2, 2, 3, 3), 
  participant_id = c("s01", 
"s02", "s05", "s02", "s03", "s06", "s09", "s10", "s19")), 
 class = "data.frame", row.names = c(NA, 
 -9L))
0 голосов
/ 13 марта 2019
#DATA
set.seed(122)
df1 = data.frame(id = rep(1:3, each = 3),
                 partcipant = paste0("s", 1:9),
                 stringsAsFactors = FALSE)

do.call(rbind,
        lapply(split(df1$partcipant, df1$id), function(x)
            data.frame(from = x[1], to = x[-1], stringsAsFactors = FALSE)))
#    from to
#1.1   s1 s2
#1.2   s1 s3
#2.1   s4 s5
#2.2   s4 s6
#3.1   s7 s8
#3.2   s7 s9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...