首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在r中铸造和熔化data.table

在r中铸造和熔化data.table
EN

Stack Overflow用户
提问于 2018-09-03 06:40:54
回答 1查看 146关注 0票数 0

我有以下data.table:

代码语言:javascript
复制
    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/ are /AVWEIGHT组合,存在多个不同的药物(med.corrected),并且每种药物都有其相应的DLYDOSE和DLYFREQ (例如,参见第8和9行)。我知道在所有的数据中,大约有800个独特的CASEID,大约有20种不同的药物。

我想把它重新排列成一个标题看起来像下面的data.table。关键是每一行都应该表示给定CASEID在给定就诊时的所有药物及其剂量信息:

代码语言:javascript
复制
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,但没有成功。

代码语言:javascript
复制
dt.m1=melt(dt, id=c("CASEID", "VISIT", "AVWEIGHT"))

然后..。

代码语言:javascript
复制
dt.c1=dcast(dt.m1, CASEID + VISIT ~ variable, value.var="value")

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

如果有任何帮助,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 12:15:37

这是一个使用tidyverse的解决方案

库(Tidyverse)

代码语言:javascript
复制
> 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
> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52141495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档