传递未引用的标准以在 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
我正在写一个很长的脚本,它采用一个简单的标准来处理气象数据,比如统计每年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