我想以动态方式在data.table的by
中使用多个表达式(不仅仅是列名)
这就是我想要做的:
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
DT[, mean(y), by = .(over4 = v > 4)]
我以为我可以传递带有表达式的字符向量,但这不起作用:
by_expression = c("over4" = "v > 4")
DT[, mean(y), by = by_expression]
有没有一种动态传递表达式的方法?
我已经解决了这个问题,但是如果有多个by条件,这会有点麻烦,然后要在稍后进行by操作之后整理一下
DT[, condition := v > 4, ]
DT[, mean(y), by = condition]
答案 0 :(得分:2)
传递quote
d表达式:
by_expression = quote(.(over4 = v > 4))
DT[, mean(y), by = by_expression]
# over4 V1
# 1: FALSE 2.75
# 2: TRUE 3.80
答案 1 :(得分:1)
by_expression <- c("over4" = "v > 4",
"over2" = "v > 2")
lapply(by_expression, function(ex) DT[, mean(y), by = .(eval(parse(text = ex)))])
结果:
$over4
parse V1
1: FALSE 2.75
2: TRUE 3.80
$over2
parse V1
1: FALSE 2.000000
2: TRUE 3.714286