给定一个分组的tbl,我可以提取一个/几个组吗?在对代码进行原型设计时,此类功能非常有用,例如:
mtcars %>%
group_by(cyl) %>%
select_first_n_groups(2) %>%
do({'complicated expression'})
Run Code Online (Sandbox Code Playgroud)
当然,可以在分组之前进行显式过滤,但这可能很麻烦.
试试这groups
是组号的向量.这1:2
意味着前两组:
select_groups <- function(data, groups, ...)
data[sort(unlist(attr(data, "indices")[ groups ])) + 1, ]
mtcars %>% group_by(cyl) %>% select_groups(1:2)
Run Code Online (Sandbox Code Playgroud)
选定的行以原始顺序显示.如果您希望行以指定组的顺序出现(例如,在上面的eaxmple中,第一组的行后跟第二组的行),则删除sort
.
随着一点点dplyr
的一些嵌套沿着/ unnesting(由支持tidyr
包),你可以建立一个小帮手,以获得第一(或组)
first = function(x) x %>% nest %>% slice(1) %>% unnest(data)
mtcars %>% group_by(cyl) %>% first()
Run Code Online (Sandbox Code Playgroud)
通过调整切片,您还可以按索引提取第n个组或任何范围的组,但是通常第一个或最后一个是大多数用户想要的。
该名称是受所有功能性API启发的first
(请参阅stdlibs,例如kotlin,python,scala,java,spark)。
确保它也可以通过直接运行而无需辅助功能
mtcars %>% group_by(cyl) %>% nest %>% slice(1) %>% unnest(data)
Run Code Online (Sandbox Code Playgroud)