r - r中的铸造和熔化数据表
问题描述
我有以下数据表:
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 比较陌生,但已经查看了一些我认为最接近我的问题的教程和问题: 在 R 中使用具有不均匀长度的变量的熔化/铸造
我尝试过使用 cast 和 melt 但没有成功。
dt.m1=melt(dt, id=c("CASEID", "VISIT", "AVWEIGHT"))
然后...
dt.c1=dcast(dt.m1, CASEID + VISIT ~ variable, value.var="value")
以及这些函数的几个变体,但没有一个接近于创建额外的列并根据需要组织数据。
我将不胜感激任何帮助。
解决方案
这是使用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
>
推荐阅读
- matlab - 如何在while循环中使用未来值线性插入过去的缺失值?
- laravel - 方法 App\Http\Livewire\Product::extension 不存在
- javascript - 如何在能够查看整个 div 的同时隐藏 DIV 滚动条
- python - 从 Scikit-Learn 的数据集中随机选择 50 个样本
- python - 如何让 GitHub 操作运行器找到使用“pip install --user”安装的可执行文件?
- jquery - 使用 Jquery 自定义触发器时,Bootstrap 弹出框不显示
- javascript - 关于元素失去焦点后输入验证的问题
- angular - Fullcalendar 设置每个资源的自定义营业时间
- django - 如何在 Django REST 中发布列表
- angular - 有条件地执行switchMap,否则,取消所有而不触发错误事件