【发布时间】:2015-04-21 22:46:13
【问题描述】:
我有两个相关的用例,我需要总结表格的一部分,以类似于filter 的方式指定。
简而言之,我想要这样的东西:
iris %>%
use_only(Species == 'setosa') %>%
summarise_each(funs(sum), -Species) %>%
mutate(Species = 'setosa_sum') %>%
use_all()
要产生这个:
Source: local data frame [101 x 5]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 250.3 171.4 73.1 12.3 setosa_sum
2 7.0 3.2 4.7 1.4 versicolor
3 6.4 3.2 4.5 1.5 versicolor
4 6.9 3.1 4.9 1.5 versicolor
5 5.5 2.3 4.0 1.3 versicolor
…
因此,我没有按列的值进行分组,而是使用过滤条件对表的视图进行操作,而 实际上不会丢失表的其余部分(与过滤器不同)。
如何智能实现use_only/use_all? 更好的是,dplyr 中是否已经包含此功能,如何使用?
当然很容易生成上面的结果,但我需要为许多不同的情况做类似的事情,过滤条件复杂多变。
【问题讨论】:
-
为什么不把 rbind 和剩下的数据集放在最后呢?是不是太慢/效率低了?
-
@konvas 不止一次这样做很麻烦。我当前的代码需要针对八个不同的标准执行此操作。我显然已经将过滤/汇总/rbind 的逻辑包装到了一个函数中,但是它所期望的参数非常不灵活,因此绝不是一个很棒的 API。哦,这个函数是特定于我的特定 DF 布局的,由 15 行组成。
-
返回行的顺序重要吗?如果被操纵的组在桌子中间的某个地方,它是否需要回到桌子中间?如果它穿插在各处,然后汇总成一行呢?