我想计算向量元素的总和,并在超过0.8的值时停止求和。然后显示用于总和的第一个元素。
感谢。
答案 0 :(得分:1)
接受@ akrun的回答。
tidyverse解决方案可能如下所示:
> library(tidyverse)
> #load your data
> a <- c(0.23076923, 0.21457490, 0.15384615, 0.13765182, 0.10931174, 0.10931174, 0.03238866, 0.01214575)
> a
[1] 0.23076923 0.21457490 0.15384615 0.13765182 0.10931174 0.10931174 0.03238866 0.01214575
> a %>%
as_tibble() %>%
mutate("cumsum" = cumsum(value)) %>%
filter(cumsum <= 0.8)
# A tibble: 4 x 2
value cumsum
<dbl> <dbl>
1 0.2307692 0.2307692
2 0.2145749 0.4453441
3 0.1538461 0.5991903
4 0.1376518 0.7368421
我已将您的矢量放入数据框(tidyverse术语中的tibble)并为运行总计添加了一个单独的列。过滤器会排除不符合条件的值。
希望有所帮助。
答案 1 :(得分:0)
我们可以使用cumsum
来创建一个逻辑索引来对sum小于或等于0.8的元素进行子集化并得到这些元素的sum
a1 <- a[cumsum(a)<= 0.8]
sum(a1)
#[1] 0.7368421
答案 2 :(得分:0)
使用:
a <- c(0.23076923, 0.21457490, 0.15384615, 0.13765182, 0.10931174,
0.10931174, 0.03238866, 0.01214575)
使用逻辑索引向量a
cumsum(a) < 0.8
进行子集化
a[cumsum(a) < 0.8]
# [1] 0.2307692 0.2145749 0.1538461 0.1376518