r - 我想使用来自多列的数据通过 mutate 函数在 rstudio 中创建一个新列
问题描述
我有一个包含超过 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。 | 新科尔 |
---|---|---|---|---|---|---|---|---|---|---|---|
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。谢谢你!
解决方案
以后,请提供一个可重现的例子。至于您的问题,我会遵循@Phil 的建议,并在添加患者编号索引后转向长格式数据。然后你只需要按行分组并选择最大值(它将是 1 或 0),然后与原始数据重新合并。
library(tidyverse)
#Read In Data
df <- data.frame(
patient = c(1:7),
dx1 = c('481',NA,NA,NA,'V555','F666',NA),
dx2 = c(NA,NA,NA,NA,NA,NA,NA),
dx3 = c(NA,NA,NA,NA,NA,NA,NA),
dx4 = c(NA,NA,NA,NA,NA,NA,NA),
dx5 = c(NA,NA,'484',NA,NA,NA,NA),
dx6 = c('482',NA,NA,'485',NA,NA,NA),
dx7 = c(NA,NA,NA,NA,NA,NA,NA),
dx8 = c(NA,NA,NA,NA,NA,NA,NA),
dx9 = c(NA,NA,NA,NA,NA,NA,NA),
dx10 = c(NA,'V334',NA,NA,'481',NA,'481')
)
# Declare variables to count
valList = c('481','482','483','484','V334','V555')
#Count, Group, and Rejoin
df %>%
pivot_longer(cols = dx1:dx10,
names_to = 'columns',
values_to = 'values') %>%
mutate(in_valList = ifelse(values %in% valList,1,0)) %>%
group_by(patient) %>%
summarise(NewCol = max(in_valList,na.rm = T)) %>%
left_join(df,by='patient')
输出最终看起来像这样,如果你绝对必须在最后有 NewCol,你可以随意重新排序。
# A tibble: 7 x 12
patient NewCol dx1 dx2 dx3 dx4 dx5 dx6 dx7 dx8 dx9 dx10
<int> <dbl> <chr> <lgl> <lgl> <lgl> <chr> <chr> <lgl> <lgl> <lgl> <chr>
1 1 1 481 NA NA NA NA 482 NA NA NA NA
2 2 1 NA NA NA NA NA NA NA NA NA V334
3 3 1 NA NA NA NA 484 NA NA NA NA NA
4 4 0 NA NA NA NA NA 485 NA NA NA NA
5 5 1 V555 NA NA NA NA NA NA NA NA 481
6 6 0 F666 NA NA NA NA NA NA NA NA NA
7 7 1 NA NA NA NA NA NA NA NA NA 481
推荐阅读
- c++ - 循环遍历 C++ 中的字符串
- laravel - 检查我的方法更新的付款日期()
- c++ - CRTP多级继承用另一个模板参数实例化中间类
- python - 方法覆盖期间的奇怪继承
- javascript - 动态表格下拉菜单无法正常工作
- reactjs - 如何新建 reactjs 和 react-native 项目并整理源码仓库?
- api - 如何在 Kotlin 的 forEach 循环中使用协程?
- javascript - 一次通话向所有订阅者发送网络推送通知
- c# - 使用 Vue JS 和 .Net Core Web API 之类的堆栈 - 我在哪里实现身份验证 (Azure AD)?
- arrays - 从 JSON 响应中的逗号分隔字符串中获取数据,并根据 IONIC 3 中的值禁用或启用按钮