литье и плавление data.table в r - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть следующая таблица данных:

    CASEID VISIT AVWEIGHT med.corrected DLYDOSE DLYFREQ
 1:   1004    10     55.5    LISINOPRIL   20.00       2
 2:   1004    20     53.9    LISINOPRIL   10.00       1
 3:   1004    30     60.4    LISINOPRIL   10.00       1
 4:   1004    40     61.3    LISINOPRIL   10.00       1
 5:   1044    10     24.7    LISINOPRIL    2.50       1
 6:   1044    20     28.1    LISINOPRIL    2.50       1
 7:   1072    10     17.3    AMLODIPINE    2.50       1
 8:   1072    20     18.3   CANDESARTAN    2.00       1
 9:   1072    20     18.3    AMLODIPINE    1.25       1
10:   1072    30     20.9   CANDESARTAN    4.00       1
11:   1072    30     20.9    AMLODIPINE    2.50       1
12:   1072    40       NA   CANDESARTAN    4.00       1
13:   1072    40       NA    AMLODIPINE    2.50       1
14:   1072    60     29.6   CANDESARTAN    4.00       1
15:   1072    60     29.6    AMLODIPINE    2.50       1
16:   1072    70     34.1   CANDESARTAN    4.00       1
17:   1072    70     34.1    AMLODIPINE    2.50       1
18:   1072    80     42.0    LISINOPRIL    2.50       1
19:   1072    80     42.0    AMLODIPINE    2.50       1
20:   1072    90     49.8    AMLODIPINE    2.50       1
21:   1078    10     68.1    LISINOPRIL   20.00       1
22:   1092    10    108.4    LISINOPRIL   40.00       1
23:   1092    20    120.5    LISINOPRIL   40.00       1
24:   1092    30    131.5    LISINOPRIL   40.00       1
25:   1092    40    123.1    LISINOPRIL   40.00       1
26:   1096    10    129.3    AMLODIPINE   15.00       1
27:   1100    10     56.3    LISINOPRIL   10.00       1
28:   1100    20     72.8    LISINOPRIL   10.00       1
29:   1132    10     52.2    LISINOPRIL    5.00       1
30:   1132    20     52.3    LISINOPRIL    5.00       1

Обратите внимание, что для некоторых комбинаций CASEID / VISIT / AVWEIGHT существует несколько разных лекарств (med.corrected), и у каждого есть свои соответствующие DLYDOSE и DLYFREQ (см., Например, строки 8 и 9). Я знаю, что во всех данных есть около 800 уникальных CASEID и около 20 различных лекарственных препаратов, представляющих интерес.

Я хотел бы изменить это в таблицу данных с заголовками, похожими на приведенные ниже. Ключ в том, что каждая строка должна представлять все лекарства и информацию о дозировке для данного CASEID при данном ВИЗИТЕ:

CASEID VISIT AVWEIGHT med.corrected_1 med.corrected_2  med.corrected_3 ... med.corrected_20

Значения DLYDOSE для каждого лекарства должны быть в столбцах от med.corrected_1 до med.corrected_20.

Это может быть очевидным, но большинство пациентов будут иметь NA для большинства лекарств в столбцах выше, так как они, вероятно, будут принимать только 1 или 2 лекарства. Тем не менее, для моего анализа, я хотел бы организовать это, как указано выше. Я относительно новичок в R, но ознакомился с несколькими учебниками и вопросами, которые, я думаю, наиболее близки к моей проблеме, перечислены здесь: Использование расплава / отливки с переменными неравной длины в R

Я пытался использовать «литье и плавить», но безуспешно.

dt.m1 = melt (dt, id = c ("CASEID", "VISIT", "AVWEIGHT")) затем... dt.c1 = dcast (dt.m1, CASEID + ВИЗИТ ~ переменная, value.var = "значение")

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

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 04 сентября 2018

Вот решение, использующее tidyverse :

библиотека (tidyverse)

> data <- data.frame(
+   CASEID =c(1004,1004,1004,1004,1004,1004,1004,1072,1072,1072),
+   VISIT =c(19,20,30,40,10,20,10,20,20,30),
+   AVWEIGHT =c(5 .... [TRUNCATED] 

> spread(data, med.corrected, DLYDOSE)
  CASEID VISIT AVWEIGHT DLYFREQ AMLODIPINE CANDESARTAN LISINOPRIL
1   1004    10     17.3       1       2.50          NA         NA
2   1004    10     24.7       1         NA          NA        2.5
3   1004    19     55.5       2         NA          NA       20.0
4   1004    20     28.1       1         NA          NA        2.5
5   1004    20     53.9       1         NA          NA       10.0
6   1004    30     60.4       1         NA          NA       10.0
7   1004    40     61.3       1         NA          NA       10.0
8   1072    20     18.3       1       1.25           2         NA
9   1072    30     20.9       1         NA           4         NA
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...