首页 > 解决方案 > 如果任何列包含值列表,则进行变异

问题描述

我正在使用 ICD 代码,需要您的帮助来尝试根据与神经病学相关的 ICD 条件来改变额外的列“神经”。这是我正在使用的示例数据集:

  ID  `ICD9 1`  `ICD9 2`  `ICD9 3` `ICD9 4` `ICD9 5` `ICD9 6` `ICD9 7` `ICD9 8` `ICD9 9`
  <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>   
1 20002038 927      NA       NA       NA       NA       NA       NA       NA       NA      
2 20003011 460      NA       NA       NA       NA       NA       NA       NA       NA      
3 20003019 320      V22      473      V22      V22      724      NA       NA       NA      
4 20003026 719      490      729      724      NA       NA       NA       NA       NA      
5 20004018 724      401      436      287      780      NA       NA       NA       NA      
6 20007016 523      339      NA       NA       NA       NA       NA       NA       NA  

我将如何:(a) 检查是否有任何 ICD9 列包含以下感兴趣的 ICD 代码:

ICD = c(320:337, 339:359 and 430:438)

(b) 然后根据包含感兴趣的 ICD 代码的行附加一个附加列“neuro”。

我尝试了以下许多错误的解决方案。第一种方法最有希望,但由于某种原因返回“0”:

for(i in 2:ncol(df)){
  x = c(320:337, 339:359 and 430:438)
  test <- test %>% 
    mutate(neuro = ifelse(i %in% x, 1, 0) )
}

我也试过这个,但成功率要低得多:

x = c(320:337, 339:359 and 430:438)
df <- df %>% 
  mutate(neuro = ifelse(apply(df == x, 1, any), 1, 0))

我可能犯了很多很多错误,并且试图弄清楚这几个小时是令人沮丧的。感谢您的帮助 - 谢谢!

标签: rmultiple-columnsdata-wrangling

解决方案


也许我们可以试试

df$neuro <- +(rowSums(matrix(as.matrix(df[-1]) %in% ICD, nrow = nrow(df))) > 0)

这样

> df
        ID ICD 1 ICD 2 ICD 3 ICD 4 ICD 5 ICD 6 ICD 7 ICD 8 ICD 9 neuro
1 20002038   927  <NA>    NA  <NA>  <NA>    NA    NA    NA    NA     0
2 20003011   460  <NA>    NA  <NA>  <NA>    NA    NA    NA    NA     0
3 20003019   320   V22   473   V22   V22   724    NA    NA    NA     1
4 20003026   719   490   729   724  <NA>    NA    NA    NA    NA     0
5 20004018   724   401   436   287   780    NA    NA    NA    NA     1
6 20007016   523   339    NA  <NA>  <NA>    NA    NA    NA    NA     1

推荐阅读