【发布时间】:2020-12-15 23:16:14
【问题描述】:
我有一个包含超过 1000 万个变量的数据集。它有 25 列用于诊断代码。每行代表一名患者。根据入院诊断代码生成,它可以放置在第 1 到 25 列之间的任何位置。我想为疾病 A 创建一个新列,其代码范围为 480,481,482,483,484,V334,V555。如果这 25 列中存在这些代码中的任何一个,则新列应返回值 1,否则为 0。
原表:
| DX1 | DX2 | DX3 | DX4. | DX5. | DX6. | DX7. | DX8. | DX9. | DX10. | DX11. |
|---|---|---|---|---|---|---|---|---|---|---|
| 481 | 482 | |||||||||
| V334 | ||||||||||
| 484 | ||||||||||
| 485. | ||||||||||
| V555 | 481 | |||||||||
| F666 | ||||||||||
| G765 | 481 |
我希望新列具有 0 或 1 个变量,即使其中一行具有值:480,481,482,483,484,V334,V555。例如
| DX1 | DX2 | DX3 | DX4. | DX5. | DX6. | DX7. | DX8. | DX9. | DX10. | DX11. | NewCol |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 481 | 482 | 1 | |||||||||
| V334 | 0 | ||||||||||
| 484 | 1 | ||||||||||
| 485. | 1 | ||||||||||
| V555 | 481 | 1 | |||||||||
| F666 | 0 | ||||||||||
| G765 | 481 | 1 |
我尝试过使用:
%>%mutate(NewCol = recode(DX1,
"486" = "1",
.default = "0"))
但这仅适用于列 DX1 和变量 486。我想申请 25 个连续列,范围从 DX1:DX25 并包括所有变量 480,481,482,483,484,V334,V555。谢谢!
【问题讨论】:
-
请提供一个可重现的例子:stackoverflow.com/questions/5963269/…
-
使用
tidyr::pivot_longer()重塑您的数据集,使这 25 列成为一列,而不是使用dplyr::case_when()重新编码和分组条件。 -
您应该提供一个小示例来说明您的数据与预期输出的外观。见how to give a reproducible example。
-
这里是 William3031,Ronak Shah 的例子。
-
请编辑您的问题并删除答案,而不是发布您的代码作为答案。