В R: Извлечение похожих траекторий из таблицы данных - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть таблица данных, которая содержит несколько шаблонов для перехода от a к c. Эти образцы назначены на разные экспедиции. Я хочу извлечь аналогичные шаблоны для разных expedition_id.

dt<- data.table(departure = c('a', 'a', 'a', 'b', 'a','d','a', 'b'), arrival = 
       c('a','a','b','c','d','c','b','c'), expedition_id = c(1,2,1,1,3,3,2,2))


 >dt          
departure      arrival    expedition_id
   a              a            1
   a              a            2
   a              b            1
   b              c            1
   a              d            3
   d              c            3
   a              b            2
   b              c            2

Результаты, которые я пытаюсь получить, выглядят как разные таблицы данных для каждого уникального шаблона.

>dt1

departure       arrival         expedition_list
   a                a                1,2
   a                b                1,2
   b                c                1,2

>dt2

departure       arrival         expedition_list
   a                d                3
   d                c                3

I Буду признателен за вашу помощь в этом.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете попробовать:

library(data.table)

dt <- dt[, .(expedition_list = toString(expedition_id)), by = .(departure, arrival)]
dt_list <- split(dt, dt$expedition_list)

list2env(
  setNames(
    dt_list,
    paste0('dt', 1:length(dt_list))
  ),
  .GlobalEnv
)

Вывод:

dt1

   departure arrival expedition_list
1:         a       a            1, 2
2:         a       b            1, 2
3:         b       c            1, 2

dt2

   departure arrival expedition_list
1:         a       d               3
2:         d       c               3
1 голос
/ 17 февраля 2020

Вы запросили data.table, но для других эта dplyr версия также может быть полезна:

dt %>%
    group_by(departure, arrival) %>%
    summarise(expedition_list = paste(expedition_id, collapse = ","))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...