在 R 中自动化数据库数据检查的条件逻辑

Automating conditional logic for database data checks in R

我正在尝试对数据库进行大数据检查。数据库中的一些字段是隐藏的,所以在做数据检查时,我需要忽略所有隐藏字段。根据存储在数据库中的条件逻辑隐藏字段。我已经导出了这个条件逻辑并将其存储在 R 中的数据框中。现在我需要通过某种方式使用条件参数的文本字符串来自动执行脚本编写本身来自动执行数据检查,我认为这是不可能的,或者找到解决这个问题的方法。

下面是我需要解决的示例代码:

id <- c(1001, 1002, 1003, 1004, 1005, 1001, 1002, 1003, 1004, 1005)
target_var <- c("race","race","race","race","race", "race_other", 
         "race_other", "race_other", "race_other", "race_other")
value <- c(1, NA, 1, 1, 6, NA, NA, NA, NA, "Asian")
branching_logic <- c(NA, NA, NA, NA, NA, 
                     "race == 6", "race == 6", "race == 6", 
                     "race == 6", "race == 6")
race <- c(NA, NA, NA,NA, NA, 1, 1, 1, 6, 6)

data <- data.frame(id, var, value, branching_logic, race) %>%
  mutate(data_check_result = case_when(
    !is.na(value) ~ "No Missing Data", 
    is.na(value) & is.na(branching_logic) ~ "Missing Data 1",
    is.na(value) & race == 6 ~ "Missing Data 2", 
    is.na(value) & race != 6 ~ "Hidden field",
  ))

如果我可以用变量替换 (race==6) 或者以某种方式将脚本定向到已经保存为字符串的条件表达式,那就太好了,但我知道 R 不能那样做。

上述问题有四类数据可能属于:

我有数千个字段需要检查伴随的分支逻辑,所以我需要一种方法来使用脚本中“branching_logic”列中保存的分支逻辑。

重要提示:这里的案例是最简单的案例。许多 target_var 变量和值变量都有分支逻辑,可以查看多个其他变量以确定是否隐藏该字段(例如 race==6 & race==1)

这是我第二次发帖,我一般不会在这里看到这么深的问题,但是如果有人有想法就太好了!

您可以将要 evaluate 的 expression 存储为 string 如果您首先将其传递给 parse(),如 this 答案中所述.

这是一个简单的示例,说明如何将 expression 存储在列中,然后将其提供给 dplyr::case_when()

library(tidyverse)

set.seed(1)
d <- tibble(
  a = sample(10),
  b = sample(10),
  c = "a >  b"
)

d %>% 
  mutate(a_bigger = case_when(
    eval(parse(text = c)) ~ "Y",
    TRUE ~ "N"
  ))
#> # A tibble: 10 x 4
#>        a     b c      a_bigger
#>    <int> <int> <chr>  <chr>   
#>  1     9     3 a >  b Y       
#>  2     4     1 a >  b Y       
#>  3     7     5 a >  b Y       
#>  4     1     8 a >  b N       
#>  5     2     2 a >  b N       
#>  6     5     6 a >  b N       
#>  7     3    10 a >  b N       
#>  8    10     9 a >  b Y       
#>  9     6     4 a >  b Y       
#> 10     8     7 a >  b Y

reprex package (v2.0.1)

创建于 2022-03-07