R - 多条件循环和标记

R - Multiple Conditional Looping and Flagging

在 运行 以下示例场景的 R 代码中需要帮助:

第 1 组:

Enc     CPT     Paid Status 
23345   97110   Paid    
23345   97140   Non Paid
23349   99396   Paid
23349   36415   Non Paid
23349   99000   Non Paid
23354   99203O  Non Paid
23367   73030   Non Paid
23367   99024   Non Paid
23372   99213O  Paid
23372   36416   Non Paid
23382   81002   Non Paid

第 2 组:

Main_CPT  Child_CPT
97110     36591
97110     36592
97110     99186
97140     36591
97140     36592
97140     97124
97140     99186
36415     36591
36415     36592
99396     36591
99396     36592
99396     94002
99396     94003
73030     36591
73030     99024
81002     94002
81002     94003

输出:

Enc     CPT     Paid Status    Flag
23345   97110   Paid           Paid Already
23345   97140   Non Paid       Adjusted
23349   99396   Paid           Paid Already
23349   36415   Non Paid       Adjusted
23349   99000   Non Paid       Not Applicable
23354   99203O  Non Paid       Not in Main CPT
23367   73030   Non Paid       Not Paid
23367   99024   Non Paid       Review
23372   99213O  Paid           Not in Main CPT
23372   36416   Non Paid       Not in Main CPT
23382   81002   Non Paid       Not Paid

型号标准:Enc group Wise

  1. 明智地分组 Enc,如果任何 CPT 与 Main_CPT 匹配:

    a) 其付费状态为 "P" : Flag= "Paid Already"

    i) 该 Enc 的剩余 CPT。与 Child_CPT 匹配的组 付费状态:Flag="Adjusted"

    ii) 该 Enc 的剩余 CPT。组与 Child_CPT 不匹配 无论付费状态如何:Flag="Not Applicable"

    b) 其付费状态为 "NP": Flag= "Not Paid"

    i) 该 Enc 的剩余 CPT。与 Child_CPT 匹配的组 付费状态:Flag="Review"

    ii) 该 Enc 的剩余 CPT。组与 Child_CPT 不匹配 无论付费状态如何:Flag="Not Applicable"

  2. 如果该编码中有任何 CPT。无论任何条件如何,组都与 Main_CPT 不匹配:Flag= "Not in Main CPT"

这应该可以完成工作(dplyr):

library(dplyr)
df %>%
  mutate_if(is.factor, as.character) %>%
  group_by(Enc) %>%
  filter(any(CPT %in% lookup$Main_CPT)) %>%
  mutate(Flag = case_when(
    Paid_Status == "Paid" ~ "P",
    (CPT %in% lookup$Child_CPT) & (Paid_Status == "Non_Paid") ~ "A",
    !(CPT %in% lookup$Child_CPT) ~ "NP",
  ))

结果:

# A tibble: 3 x 4
# Groups:   Enc [1]
    Enc   CPT Paid_Status  Flag
  <int> <chr>       <chr> <chr>
1 23349 99396        Paid     P
2 23349 36415    Non_Paid     A
3 23349 99000    Non_Paid    NP

数据:

df = read.table(text = "Enc     CPT     Paid_Status 
23345   97110   Paid    
23345   97140   Non_Paid
23349   99396   Paid
23349   36415   Non_Paid
23349   99000   Non_Paid
23354   99203O  Paid
23367   73030   Paid
23367   99024   Non_Paid
23372   99213O  Paid
23372   36415   Non_Paid
23382   81002   Non_Paid", header = TRUE)

lookup = read.table(text = "Main_CPT  Child_CPT
26010     01810
                    26010     99396
                    26010     0213T
                    26010     0216T
                    99396     64490
                    99396     36415
                    99396     64492
                    99396     64493
                    99396     64494
                    99396     64495
                    26034     64530
                    26034     69990
                    26034     36415
                    26034     99149
                    26034     99150", header = TRUE)

library(dplyr)
lookup = lookup %>% mutate_all(as.character)