给定一个分组的tbl,我可以提取一个/几个组吗? 在对代码进行原型设计时,这种功能非常有用,例如:
mtcars %>%
group_by(cyl) %>%
select_first_n_groups(2) %>%
do({'complicated expression'})
当然,可以在分组之前进行显式过滤,但这可能很麻烦。
答案 0 :(得分:8)
尝试使用groups
是组号的向量。这里1:2
表示前两组:
select_groups <- function(data, groups, ...)
data[sort(unlist(attr(data, "indices")[ groups ])) + 1, ]
mtcars %>% group_by(cyl) %>% select_groups(1:2)
所选行以原始顺序显示。如果您希望行按照指定组的顺序显示(例如,在上面的eaxmple中,第一组的行后跟第二组的行),则删除sort
。
答案 1 :(得分:5)
有一点dplyr
以及一些嵌套/取消(由tidyr
包支持),你可以建立一个小帮手来获得第一个(或任何)组
first = function(x) x %>% nest %>% slice(1) %>% unnest(data)
mtcars %>% group_by(cyl) %>% first()
通过调整切片,您还可以按索引提取第n个或任何范围的组,但通常第一个或最后一个是大多数用户想要的。
该名称的灵感来自功能API,它们都称之为first
(参见kotlin,python,scala,java,spark等stdlibs)。
当然,通过直接运行
,它也可以在没有辅助功能的情况下工作mtcars %>% group_by(cyl) %>% nest %>% slice(1) %>% unnest(data)