【发布时间】:2017-08-07 14:58:44
【问题描述】:
我想根据元素总和小于或等于n 对向量进行分组。假设如下,
set.seed(1)
x <- sample(10, 20, replace = TRUE)
#[1] 3 4 6 10 3 9 10 7 7 1 3 2 7 4 8 5 8 10 4 8
#Where,
n = 15
预期的输出是对总和
y <- c(1, 1, 1, 2, 2, 3, 4, 5 ,5, 5, 6, 6, 6, 7, 7, 8, 8, 9, 9, 10)
如你所见,总和永远不会大于 15,
sapply(split(x, y), sum)
# 1 2 3 4 5 6 7 8 9 10
#13 13 9 10 15 12 12 13 14 8
注意:我将在巨大的数据集(通常 > 150 - 200GB)上运行它,因此效率是必须的。
我尝试过并接近但失败的方法是,
as.integer(cut(cumsum(x), breaks = seq(0, max(cumsum(x)) + 15, 15)))
#[1] 1 1 1 2 2 3 3 4 4 4 5 5 5 6 6 6 7 8 8 8
【问题讨论】:
-
@akrun 感谢您的链接。我会尽快给他们阅读
-
是的,它是重复的,@akrun 你在这里有一个可以推广的解决方案:stackoverflow.com/questions/44512075/…
标签: r performance rcpp