【问题标题】:R - Multiple Conditional Looping and FlaggingR - 多条件循环和标记
【发布时间】:2017-10-11 21:25:42
【问题描述】:

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

第一组:

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. 如果有任何 CPT 与 Main_CPT 匹配,则对 Enc 进行分组:

    a) 并且它的付费状态是“P”:Flag="Paid Already"

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

    ii) 该编码的剩余 CPT。组与 Child_CPT 不匹配 不考虑付费状态:Flag="Not Applicable"

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

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

    ii) 该编码的剩余 CPT。组与 Child_CPT 不匹配 不考虑付费状态:Flag="Not Applicable"

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

【问题讨论】:

  • 你能提供预期的输出吗?
  • 在第一个数据集中,来自enc no。 23349 具有 3 个具有 3 个唯一 CPT 代码的观测值,其中一个代码应与第 2 个数据集的主 CPT 匹配,并且第一个数据集状态的相应 CPT 已支付!然后用“P”标记 CPT,然后剩余的 CPT 代码用于该特定 Enc 编号。必须与第二个数据集的子 CPT 匹配,并且该 CPT 必须用“A”标记。
  • 预期输出如“最终数据集的实际样子”
  • Enc CPT Paid Status Flag 23349 99396 Paid P 23349 36415 Non Paid A 23349 99000 Non Paid NF # in Enc 23349, CPT 99396 与第二个数据集中的 Main_CPT 和第一个数据集状态的状态匹配已付费,因此标记为“P”。对于相同的编码。否,如果在对应 Main_CPT 的子 CPT 中找到并且状态为未付费,则剩余 CPT 36415,则标记为“A”,如果在对应 Main_CPT 的子 CPT 中未找到,则标记为“NF”。
  • 请将其编辑到您的问题中,而不是在评论部分提供。

标签: r dataframe data-modeling


【解决方案1】:

这应该可以完成工作(使用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)

【讨论】:

  • 非常感谢用户,这对我来说效果很好,几乎没有修改。再次感谢您耐心解答我的疑问。
  • 如果我需要添加另一个条件,如果该 Enc 没有任何 CPT。与 Main_CPT 匹配且付费状态为“未付费”,我需要将该案例以及该 Enc 的所有剩余 CPT 更改为“评论”??
  • @RAVI 只需在case_whenPaid_Status == "Paid" ~ "P" 之后添加新条件即可。
  • 无论在 Paid_Status == "Paid" ~ "P" 之后添加第二个条件,我都会得到相同的输出。你能帮我处理这个案子吗?我什么时候应该添加另一个条件:Paid_Status == "Non_Paid" ~ "Non_paid", (CPT %in% lookup$Child_CPT) == "Review", !(CPT %in% lookup$Child_CPT) ~ "NP", ))
  • @RAVI 更新您的问题和预期输出以反映新情况。通常不鼓励添加这样的额外要求。
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2016-10-26
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多