我正在尝试对数据库进行大型数据检查。数据库中的一些字段是隐藏的,所以当我进行数据检查时,我需要忽略所有隐藏的字段。字段是根据存储在数据库中的条件逻辑隐藏的。我已经导出了这个条件逻辑,并将其存储在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并且分支逻辑为NOT net,则显示字段
我有数千个字段要用附带的分支逻辑进行检查,所以我需要一种方法来使用保存在"branching_ logic";列。
重要提示:这里的情况是最简单的情况。许多target_var变量和value变量具有分支逻辑,该逻辑查看多个其他变量以确定是否隐藏字段(例如race==6&race==1(
这只是我第二次发帖,我通常不会在这里看到这样深入的问题,但如果有人有想法,那就太好了!
如果您首先将想要eval
的expression
传递给parse()
,则可以将其存储为string
,如本答案所述。
下面是一个简单的示例,说明如何将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
创建于2022-03-07由reprex包(v2.0.1(