R dplyr:非标准评估难度。想在过滤器和变异中使用动态变量名称

时间:2018-08-09 17:36:08

标签: r dplyr

我创建了一个可重现的示例来说明我在R(dplyr)中进行非标准评估时遇到的问题。我想在以下情况下使用动态变量名称:

30px

`

2 个答案:

答案 0 :(得分:3)

1)rlang 像这样使用sym

library(dplyr)
library(rlang)

firstDateName <- sym("birth_d")
secondDateName <- sym("death_d")
badRecords <- patientData %>% filter(!!firstDateName > !!secondDateName)

给予:

> badRecords
  patientID    birth_d    treat_d    death_d
1         5 2017-01-01 2011-12-27 2012-12-26
2         7 2011-06-25 2012-06-24 2001-01-01
3        12 2018-05-05 2013-09-17 2014-09-17

2)基本R 或基本R:

firstDateName <- "birth_d"
secondDateName <- "death_d"
is.bad <- patientData[[firstDateName]] > patientData[[secondDateName]]
badRecords <- patientData[is.bad, ]

2a)子集的另一个基本解决方案是将上面的最后两行替换为:

subset(patientData, get(firstDateName) > get(secondDateName))

答案 1 :(得分:1)

这是parse_exprrlang的一个选项

library(rlang)
library(dplyr)
patientData %>%
        filter(!! parse_expr(paste(firstDateName, ">", secondDateName)))
#   patientID    birth_d    treat_d    death_d
#1         5 2017-01-01 2011-12-27 2012-12-26
#2         7 2011-06-25 2012-06-24 2001-01-01
#3        12 2018-05-05 2013-09-17 2014-09-17