相关疑难解决方法(0)

到达最大值的累积总和,然后在下一行从零开始重复

我觉得这是一个相当容易的问题,但对于我的生活,我似乎无法找到答案.我有一个相当标准的数据框,我想要做的是将一列值相加,直到它们达到某个值(精确值或大于它),此时它将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放入保留列,然后重新开始求和,并继续在整个数据集中运行.

在此先感谢,如果您需要更多信息,请告诉我们.

艾登

loops if-statement r cumsum

12
推荐指数
2
解决办法
4974
查看次数

条件总和上的组矢量

我想基于元素之和小于或等于对矢量进行分组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)

performance r rcpp

9
推荐指数
1
解决办法
268
查看次数

如何加速或矢量化for循环?

我想通过矢量化或使用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)

performance for-loop r vectorization rcpp

7
推荐指数
1
解决办法
678
查看次数

如果 r 中的值变为负值,则重置 cumsum

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)

r conditional-statements cumsum dplyr

5
推荐指数
1
解决办法
1669
查看次数