在 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 不能那样做。
上述问题有四类数据可能属于:
- 无缺失数据:仅当值为非 na
- 缺失数据1:如果值为NA,并且没有隐藏变量的分支逻辑。
- 缺失数据2:如果值为NA且满足分支逻辑显示该字段
- 隐藏字段:如果值为 NA 且分支逻辑不是 net 以显示该字段
我有数千个字段需要检查伴随的分支逻辑,所以我需要一种方法来使用脚本中“branching_logic”列中保存的分支逻辑。
重要提示:这里的案例是最简单的案例。许多 target_var 变量和值变量都有分支逻辑,可以查看多个其他变量以确定是否隐藏该字段(例如 race==6 & race==1)
这是我第二次发帖,我一般不会在这里看到这么深的问题,但是如果有人有想法就太好了!
您可以将要 eval
uate 的 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
我正在尝试对数据库进行大数据检查。数据库中的一些字段是隐藏的,所以在做数据检查时,我需要忽略所有隐藏字段。根据存储在数据库中的条件逻辑隐藏字段。我已经导出了这个条件逻辑并将其存储在 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 不能那样做。
上述问题有四类数据可能属于:
- 无缺失数据:仅当值为非 na
- 缺失数据1:如果值为NA,并且没有隐藏变量的分支逻辑。
- 缺失数据2:如果值为NA且满足分支逻辑显示该字段
- 隐藏字段:如果值为 NA 且分支逻辑不是 net 以显示该字段
我有数千个字段需要检查伴随的分支逻辑,所以我需要一种方法来使用脚本中“branching_logic”列中保存的分支逻辑。
重要提示:这里的案例是最简单的案例。许多 target_var 变量和值变量都有分支逻辑,可以查看多个其他变量以确定是否隐藏该字段(例如 race==6 & race==1)
这是我第二次发帖,我一般不会在这里看到这么深的问题,但是如果有人有想法就太好了!
您可以将要 eval
uate 的 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