R 中按组排列的不同 n 的标题行
heading rows with different n by group in R
我正在尝试获取 object 的前 n 个部分,但根据我在其他 object.
中的值,每组的 n 个不同
我有下一个可复制的例子:
a<- tibble(id = c(1,2,3,4,5,6,7,8,9,10),
group = c(1,1,1,1,1,2,2,2,2,2))
b<- tibble(group=c(1,2),
n = c(3,4))
我想要的是当组为1时获取a的前3行,当组为2时获取a的前4行。
我正在尝试这样做:
cob<- a %>% group_by(group) %>% arrange(id, .by_group = TRUE) %>%
group_map(~head(.x, b$n))
但是我只得到了两组中的前 3 行,并且每组的大小没有不同。
我们可以做一个连接,然后 filter
library(dplyr)
a %>%
left_join(b) %>%
group_by(group) %>%
filter(row_number() <= first(n)) %>%
ungroup %>%
select(-n)
或者另一个选项是
a %>%
group_by(group) %>%
slice(seq_len(b$n[match(cur_group(), b$group)]))
这是一个data.table解决方案。
library(data.table)
setDT(a) # only needed because you started with a tibble
setDT(b) # same
a[b, on=.(group)][, .(id=id[1:n]), by=.(group, n)]
group n V1
1: 1 3 1
2: 1 3 2
3: 1 3 3
4: 2 4 6
5: 2 4 7
6: 2 4 8
7: 2 4 9
第一个子句:a[b, on=.(group)]
将 b
连接到 a
创建一个 data.table 包含列 group
、id
和 n
。第二个子句:[, .(id=id[1:n]), by=.(group, n)]
groups by group
,每组取 id
的前 n
个元素。
我正在尝试获取 object 的前 n 个部分,但根据我在其他 object.
中的值,每组的 n 个不同我有下一个可复制的例子:
a<- tibble(id = c(1,2,3,4,5,6,7,8,9,10),
group = c(1,1,1,1,1,2,2,2,2,2))
b<- tibble(group=c(1,2),
n = c(3,4))
我想要的是当组为1时获取a的前3行,当组为2时获取a的前4行。
我正在尝试这样做:
cob<- a %>% group_by(group) %>% arrange(id, .by_group = TRUE) %>%
group_map(~head(.x, b$n))
但是我只得到了两组中的前 3 行,并且每组的大小没有不同。
我们可以做一个连接,然后 filter
library(dplyr)
a %>%
left_join(b) %>%
group_by(group) %>%
filter(row_number() <= first(n)) %>%
ungroup %>%
select(-n)
或者另一个选项是
a %>%
group_by(group) %>%
slice(seq_len(b$n[match(cur_group(), b$group)]))
这是一个data.table解决方案。
library(data.table)
setDT(a) # only needed because you started with a tibble
setDT(b) # same
a[b, on=.(group)][, .(id=id[1:n]), by=.(group, n)]
group n V1
1: 1 3 1
2: 1 3 2
3: 1 3 3
4: 2 4 6
5: 2 4 7
6: 2 4 8
7: 2 4 9
第一个子句:a[b, on=.(group)]
将 b
连接到 a
创建一个 data.table 包含列 group
、id
和 n
。第二个子句:[, .(id=id[1:n]), by=.(group, n)]
groups by group
,每组取 id
的前 n
个元素。