【问题标题】:casting and melting data.table in rr中的铸造和熔化数据表
【发布时间】:2019-02-08 00:33:52
【问题描述】:

我有以下data.table:

    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 种不同的感兴趣的药物。

我想将其重新排列到一个 data.table 中,其标题如下所示。关键是每一行应代表给定 VISIT 中给定 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 比较陌生,但已经查看了一些教程和问题,我认为最接近我的问题的问题列在这里: Using melt / cast with variables of uneven length in R

我尝试过使用 cast 和 melt 但不成功。

dt.m1=melt(dt, id=c("CASEID", "VISIT", "AVWEIGHT"))

那么……

dt.c1=dcast(dt.m1, CASEID + VISIT ~ variable, value.var="value")

以及这些函数的几个变体,但没有一个接近于创建额外的列并根据需要组织数据。

我将不胜感激。

【问题讨论】:

    标签: r casting reshape2 melt


    【解决方案1】:

    这是一个使用 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
    > 
    

    【讨论】:

    • 感谢您,抱歉耽搁了。我使用 cast 解决了这个问题,注意到有几行 caseid、visit 和 med.corrected 的单个组合不是唯一的。也就是说,一些 caseid 和 visit 组合对于同一个 med.corrected 有多行。这可能是患者早上服用 100 毫克拉贝洛尔,晚上服用 150 毫克。因此,我通过将它们组合成一个总剂量的单行来解决这个问题。演员功能在那之后起作用了。
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 2016-12-18
    • 2014-07-12
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多