我创建了一个可重现的示例来说明我在R(dplyr)中进行非标准评估时遇到的问题。我想在以下情况下使用动态变量名称:
30px
`
答案 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_expr
中rlang
的一个选项
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