传递未引用的标准以在 dplyr 中计数

passing unquoted criterion to count in dplyr

我正在写一个很长的脚本,它采用一个简单的标准来处理气象数据,比如统计每年30度以上的总天数,我只想输入一次标准,存储为一个对象,说:

var <- "V2 > 0"

在脚本顶部输入这个;问题是当我将它传递给

count(criterion = var)

它被读取为字符和 returns NaN,我尝试了 unquote()、as.name() 没有给出结果,而 as.factor() 给出了错误的结果, 我的数据样本:

station = structure(list(V1 = structure(1:10, .Label = c("18/06/1982", 
"19/06/1982", "20/06/1982", "21/06/1982", "22/06/1982", "23/06/1982", 
"24/06/1982", "25/06/1982", "26/06/1982", "27/06/1982"), class = "factor"), 
    V2 = c(0, 0, 0, 0, 3.5, 2.2, 0, 0, 1, 1.1)), .Names = c("V1", 
"V2"), row.names = c(NA, 10L), class = "data.frame")

我正在尝试 运行 的代码(通过将 V2 > 0 替换为对象 var):

library(dplyr)
library(lubridate)
station %>% mutate(V1=dmy(station$V1, tz="America/Mexico_City")) %>% 
  group_by(year(V1)) %>% count(criterion = V2 > 0 ) %>% filter(criterion == T)  %>% 
  colMeans(na.rm = T)

您可以使用表达式和 !!:

cond = quo(V2 > 0)
station %>% mutate(V1=dmy(station$V1, tz="America/Mexico_City")) %>% 
  group_by(year(V1)) %>% count(criterion = !!cond ) %>% filter(criterion == T)  %>% 
  colMeans(na.rm = T)

#  year(V1) criterion         n 
#      1982         1         4