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
明智地分组 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"
如果该编码中有任何 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)
在 运行 以下示例场景的 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
明智地分组 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"
如果该编码中有任何 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)