我想知道是否有办法这样做:
iris %.% group_by(Species) %.%
mutate(v1=Sepal.Length / mean(Sepal.Length)) %.%
filter(v1 > 1.15) %.% select(Species:v1)
跳过select
位。我认为以下内容应该有效(但由于许多原因,并没有):
iris %.% group_by(Species) %.%
select(Species, v1=Sepal.Length / mean(Sepal.Length)) %.%
filter(v1 > 1.15)
请注意,在此示例中,我将mutate
替换为select
,希望单独这样做。这也不起作用,因为summarize
期望表达式返回1值:
iris %.%
group_by(Species) %.%
summarise(Sepal.Length / mean(Sepal.Length)) %.%
filter(v1 > 1.15)
显然,这不是一个大问题,但想知道是否有一种更简单的方法来复制默认的data.table
行为:
data.table(iris)[, Sepal.Length / mean(Sepal.Length), by=Species][V1 > 1.15]
仅生成by
列和计算值:
Species V1
1: setosa 1.158610
2: versicolor 1.179245
3: versicolor 1.162399
4: virginica 1.153613
5: virginica 1.168792
6: virginica 1.168792
7: virginica 1.168792
8: virginica 1.199150
9: virginica 1.168792
答案 0 :(得分:2)
现在可以使用dplyr的新transmute
函数简化此操作,该函数会删除除分组变量和cumputed变量之外的任何列(在这种情况下为V1)。
require(dplyr) # >= 0.3.0.2
iris %>%
group_by(Species) %>%
transmute(v1 = Sepal.Length / mean(Sepal.Length)) %>%
filter(v1 > 1.15)
#Source: local data frame [9 x 2]
#Groups: Species
#
# Species v1
#1 setosa 1.158610
#2 versicolor 1.179245
#3 versicolor 1.162399
#4 virginica 1.153613
#5 virginica 1.168792
#6 virginica 1.168792
#7 virginica 1.168792
#8 virginica 1.199150
#9 virginica 1.168792