Существует ли функция R для изменения фрейма данных для вложенной модели данных? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь изменить свой фрейм данных для вложенной модели данных, но я не могу понять, как это сделать, используя R.

Это мой фрейм данных:

idquestionario cod_cartao ord_cartao
             1      33333          5
             1      Death          4
             1      12123          2
             1      22332          3
             1      32332          5
             1      11111          1
            10      23222          7
            10      Death          4
            10      12233          2
            10      33333          4
            10      12111          1
            10      22332          3
...

Мне нужно изменить форму моего фрейма данных, чтобы получить этот результат:

idquestionario cod_cartao cod_cartao
             1      11111      12123
             1      11111      22332
             1      11111      22332
             1      11111      Death
             1      11111      32332
             1      11111      33333
             1      12123      22332
             1      12123      Death
             1      12123      32332
             1      12123      33333
             1      22332      22332
             1      22332      Death
             1      22332      32332
             1      22332      33333
             1      Death      32332
             1      Death      33333
            10      12111      12233
            10      12111      22332
            10      12111      22332
            10      12111      33333
            10      12233      22332
            10      12233      33333
            10      22332      33333
...

Просто попробуйте объяснить мой фрейм данных. У меня есть три столбца (idquestionario, cod_cartao, ord_cartao)

  • idquestionario - числовой столбец индекса
  • cod_cartao - это код карты, используемый для измерения качества жизни
  • ord_cartao - рейтинг карт (1 - лучший, 2 - второй и т. Д.). Вы можете иметь связи в этом рейтинге.

Например, id = 1, у нас есть рейтинг: 1, 2, 3, 4 и 5. Рейтинг напрямую связан с картами:

1 - 11111
2 - 12123
3 - 22332
4 - Смерть
5 - 33333 и 32332

Так что мне нужно сопоставить все карты, используя код ранжирования:

1 2
1 3
1 4
1 5 Doesn't matter the order
1 5 Doesn't matter the order
2 3
2 4
2 5 Doesn't matter the order
2 5 Doesn't matter the order
3 4
3 5 Doesn't matter the order
3 5 Doesn't matter the order
4 5 Doesn't matter the order
4 5 Doesn't matter the order

Спасибо за ваше терпение и за помощь!

1 Ответ

0 голосов
/ 01 апреля 2019

Вы можете сделать:

library(data.table)
setDT(DT)

DT[order(ord_cartao), 
  CJ(cod1 = cod_cartao, cod2 = cod_cartao, sorted = FALSE)[ CJ(V1 = ord_cartao, V2 = ord_cartao, sorted = FALSE)[, V1 < V2] ]
, by=idquestionario]

    idquestionario  cod1  cod2
 1:              1 11111 12123
 2:              1 11111 22332
 3:              1 11111 Death
 4:              1 11111 33333
 5:              1 11111 32332
 6:              1 12123 22332
 7:              1 12123 Death
 8:              1 12123 33333
 9:              1 12123 32332
10:              1 22332 Death
11:              1 22332 33333
12:              1 22332 32332
13:              1 Death 33333
14:              1 Death 32332
15:             10 12111 12233
16:             10 12111 22332
17:             10 12111 Death
18:             10 12111 33333
19:             10 12111 23222
20:             10 12233 22332
21:             10 12233 Death
22:             10 12233 33333
23:             10 12233 23222
24:             10 22332 Death
25:             10 22332 33333
26:             10 22332 23222
27:             10 Death 23222
28:             10 33333 23222
    idquestionario  cod1  cod2

Как это работает. Первый CJ принимает декартову комбинацию кодовых векторов.Второй делает то же самое для векторов заказа.Предикат V1 < V2 вычисляется для векторов порядка и используется для фильтрации таблицы, сгенерированной для векторов кода.

Комментарий. Это выглядит как очень неэффективный способ упорядочения данных, посколькуразмер таблицы будет увеличиваться без какой-либо дополнительной информации.Более того, он будет сбрасывать идентификаторы, для которых все коды имеют одинаковый ранг.Если вы хотите хранить информацию о рангах по-другому, возможно, используйте пакет igraph со ссылками, созданными соседними рангами.Я имею в виду график, подобный тому, что изображен в верхней части здесь: https://en.wikipedia.org/wiki/Graded_poset

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...