我觉得这是一个相当容易的问题,但对于我的生活,我似乎无法找到答案.我有一个相当标准的数据框,我想要做的是将一列值相加,直到它们达到某个值(精确值或大于它),此时它将1放入一个新列(标记为保持)并在0处重新开始求和.
我有一列分钟,分钟,保留列和累积总和列之间的差异(我使用的示例比实际的完整数据集更清晰)
minutes difference keep difference_sum
1052991158 0 0 0
1052991338 180 0 180
1052991518 180 0 360
1052991698 180 0 540
1052991878 180 0 720
1052992058 180 0 900
1052992238 180 0 1080
1052992418 180 0 1260
1052992598 180 0 1440
1052992778 180 0 1620
1052992958 180 0 1800
Run Code Online (Sandbox Code Playgroud)
差值和列用代码计算
caribou.sub$difference_sum<-cumsum(difference)
Run Code Online (Sandbox Code Playgroud)
我想要做的是运行上面的代码,条件是,当求和值达到1470或任何大于它的数字时,它将1放入保留列,然后重新开始求和,并继续在整个数据集中运行.
在此先感谢,如果您需要更多信息,请告诉我们.
艾登
我想基于元素之和小于或等于对矢量进行分组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
Run Code Online (Sandbox Code Playgroud)
预期输出将是组值,而它们的总和<= 15,即
y <- c(1, 1, 1, 2, 2, 3, 4, 5 ,5, 5, 6, 6, 6, 7, 7, 8, 8, 9, 9, 10)
Run Code Online (Sandbox Code Playgroud)
如你所见,总和绝不会超过15,
sapply(split(x, y), sum)
# 1 2 3 4 5 6 7 8 9 10
#13 13 9 10 15 …Run Code Online (Sandbox Code Playgroud) 我想通过矢量化或使用Data.table或其他方法来提高for循环的速度.我必须在1,000,000行上运行代码,我的代码非常慢.
代码是相当不言自明的.我在下面提供了一个解释,以防万一.我已经包含了函数的输入和输出.希望你能帮助我更快地完成这项功能.
我的 目标是将矢量"Volume"分区,其中每个bin等于100份.向量"卷"包含交易的股票数量.这是它的样子:
head(Volume, n = 60)
[1] 5 3 1 5 3 1 1 1 1 1 1 1 18 1 1 18 2 7 13 2 7 13 3 2 1 1 3 2 1 1 1
[32] 1 6 6 1 1 1 1 1 1 1 1 18 2 1 1 2 1 14 18 2 1 1 2 1 14 1 1 9 5
Run Code Online (Sandbox Code Playgroud)
向量"binIdexVector"与"Volume"的长度相同,它包含bin号; 即前100个股票的每个元素得到数字1,接下来100个股票的每个元素得到数字2,接下来100个股票的每个元素得到数字3,依此类推.这是矢量的样子:
head(binIdexVector, n = 60)
[1] 1 1 …Run Code Online (Sandbox Code Playgroud) ve <- c(17, -9, 9, -17, 17, -17, 11, -9, 16, -18, 17, 0, 0, -18, 17, 0, 0, -17, 14, -14, 17, -2, 0, -15, 9, -9, 17, -16, 16, -17, 17, -17, 17, -17, 17, -17, 17, -8, 7, -16, 17, -14, 14, -10, 10, -16, 16, -10, 10, -12, 12, -11, 11, -17, 17, -17, 17, -9, 8, -17, 17, -17, 17, -16, 16, -17, 17, -8, 8, -9, 9, -17, 17, -17, 17, -13, 13, -10, …Run Code Online (Sandbox Code Playgroud)