我想每隔三行对Chr
进行一次聚合(三行之和)。但是,由于df
不能被3整除,我不确定如何处理最后剩下的行,可能只有1行或2行。如果剩下两行,我想只对这两行求和。
- 输入
data.frame(Chr = c("chr1","chr1","chr1","chr1","chr1","chr2","chr2","chr2","chr2","chr2","chr3"),
value = c(1,3,1,3,5,6,3,1,3,5,0),
seq = c(1,2,3,4,5,1,2,3,4,5,6))
- 输出(使用
dplyr
mutate
,保留所有列)
data.frame(Chr = c("chr1","chr1","chr1","chr1","chr1","chr2","chr2","chr2","chr2","chr2","chr3"),
value = c(1,3,1,3,5,6,3,1,3,5,0),
seq = c(1,2,3,4,5,1,2,3,4,5,6),
agg = c(5,5,5,8,8,10,10,10,8,8,8))
4条答案
按热度按时间laik7k3q1#
dplyr
和ave
选项或使用
data.table
holgip5t2#
可以使用
(row_number()-1) %/% 3
按3个观测进行分组。如果不需要
Grp
列,可以使用select(-Grp)
删除它。nvbavucw3#
将行号(
Chr
组内)除以3,然后将此比率四舍五入,前3个值为1,后3个值为2,依此类推。然后,您可以按Chr
和此变量进行分组,以计算总和:nbysray54#
下面是另一种类似的方法:尝试新的
.by
参数。我尝试在最后一次变异时也使用它,但无法将cumsum(..与.by
组合在一起: