gpt4 book ai didi

r - 拆分向量并求和值

转载 作者:行者123 更新时间:2023-12-04 09:37:01 24 4
gpt4 key购买 nike

我是 R 新手。我有一个向量

vec <- c(105,29,41,70,77,0,56,49,63,0,105)

我想对值求和直到出现“0”,然后创建一个具有这些值的向量,例如:

vec2 <- c(322,168,105)

但是我真的不知道从哪里开始!有什么建议吗?

最佳答案

从这个向量开始...

> vec
[1] 105 29 41 70 77 0 56 49 63 0 105

我们可以计算零所在位置的逻辑 TRUE/FALSE 向量:

> vec == 0
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE

当您将 FALSE 和 TRUE 相加时,FALSE 为零而 TRUE 为一,因此如果我们在每次得到 TRUE 时将该向量相加,该值就会增加。所以使用 cumsum 作为累加和,我们得到:

> cumsum(vec==0)
[1] 0 0 0 0 0 1 1 1 1 2 2

现在该结果定义了我们要在其中添加的组,所以让我们根据该结果split vec:

> split(vec, cumsum(vec==0))
$`0`
[1] 105 29 41 70 77

$`1`
[1] 0 56 49 63

$`2`
[1] 0 105

因此,除了列表第二部分和后续部分中的零之外,这就是我们要加起来的数字。因为我们正在添加,所以我们可以添加零,这没有任何区别(但如果你想要平均值,你必须删除零)。现在我们使用 sapply 迭代列表元素并计算总和:

> sapply(split(vec, cumsum(vec==0)),sum)
0 1 2
322 168 105

工作完成。忽略 0 1 2 标签。

关于r - 拆分向量并求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com