简化grep特定字段值的方式

问题描述 投票:0回答:1

大家,我的数据。框架就像:

      id ACODE_ICD9_1 ACODE_ICD9_2 ACODE_ICD9_3
    <int>       <char>       <char>       <char>
 1:    20          463         4660         4720
 2:    27        42731        43490        73300
 3:    48        40210         2722        43410
 4:    52        40210        43410         4139
 5:    57        40210        43410         4139
 6:    58        40210        43410         4139
 7:    59         4660         7242         7245
 8:    77        40210         7804         7840
 9:    98        42731         7804        78650
10:   101          463         4269        78052
....

我想通过我的 ICD 代码 grep 疾病, 还有其他方法可以简化吗? 因为我有很多疾病 它会让我的程序变得更复杂、可读性更差。

谢谢!

disease <- data %>%
  mutate(AF = ifelse(grepl("^42731", ACODE_ICD9_1) |
                       grepl("^42731", ACODE_ICD9_2) |
                       grepl("^42731", ACODE_ICD9_3), 1, 0),
         HTN = ifelse(grepl("^401|^402|^403|^404|^405", ACODE_ICD9_1) |
                            grepl("^401|^402|^403|^404|^405", ACODE_ICD9_2) |
                            grepl("^401|^402|^403|^404|^405", ACODE_ICD9_3), 1, 0),
         DM = ifelse(grepl("^250", ACODE_ICD9_1) |
                           grepl("^250", ACODE_ICD9_2) |
                           grepl("^250", ACODE_ICD9_3), 1, 0)...
r grep
1个回答
0
投票
 df %>% 
    mutate(AF = +if_any(-id, ~str_detect(., "^42731")), 
           HTN = +if_any(-id, ~grepl("^40[1-5]", .)), 
           DM = +if_any(-id, ~grepl("^250", .)))

     id ACODE_ICD9_1 ACODE_ICD9_2 ACODE_ICD9_3 AF HTN DM
1:   20          463         4660         4720  0   0  0
2:   27        42731        43490        73300  1   0  0
3:   48        40210         2722        43410  0   1  0
4:   52        40210        43410         4139  0   1  0
5:   57        40210        43410         4139  0   1  0
6:   58        40210        43410         4139  0   1  0
7:   59         4660         7242         7245  0   0  0
8:   77        40210         7804         7840  0   1  0
9:   98        42731         7804        78650  1   0  0
10: 101          463         4269        78052  0   0  0
© www.soinside.com 2019 - 2024. All rights reserved.