繁体   English   中英

我想通过使用来自多个列的数据变异 function 在 rstudio 中创建一个新列

[英]I want to create a new column in rstudio through mutate function using data from multiple columns

我有一个包含超过 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 的建议和 pivot 对长格式数据进行操作。 然后你只需要按行分组并选择最大值(它将是 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')

output 最终看起来像这样,如果你绝对必须在最后有 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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM