我正在尝试使用dplyr命令对子集和数据进行突变的函数。我的虚假数据是这样的:
newTest_rv <- data.frame(is_op=c(rep(0,6),rep(1,4)),
has_click=c(0,0,1,1,1,1,0,0,1,1),
num_pimp=c(3,5,1,2,3,5,2,5,3,5),
freq = c(rep(1,5),5,1,2,1,2))
我的功能是这样的:
reweight <- function(data, conds){
require(dplyr)
require(lazyeval)
data %>%
filter_(lazy(conds)) %>%
group_by(num_pimp) %>%
mutate_(lazy(new_num) = lazy(num_pimp) - lazy(sum(freq[lazy(!conds)]))) %>%
mutate(new_weight=freq*(1/new_num)) %>%
ungroup()
}
> reweight(newTest_rv, is_op==0)
使用条件语句“ is_op == 0”的非标准评估似乎可以在其他地方使用,但不能在组“ lazy(sum(freq [lazy(!conds)]))”中的子集中使用。有什么办法可以解决这个问题?
谢谢!
看来您对lazy
s有点过头了。该lazy()
函数创建一个惰性对象,该对象基本上会延迟表达式的求值。您不能只编写标准表达式和惰性表达式。通常,您可以通过lazyevalinterp()
函数将它们组合在一起。我想你想要的是
mutate_(new_num = interp(~num_pimp - sum(freq[!(x)]), x=lazy(conds)))
在这里,我们使用interp()
一个标准表达式(在这种情况下,使用公式语法),然后将惰性表达式作为子集向量插入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句