gpt4 book ai didi

r - cumsum 在 NA 之后重新开始

转载 作者:行者123 更新时间:2023-12-02 07:00:41 24 4
gpt4 key购买 nike

我有一个包含多列的数据框。对于一列,我想计算累积总和,但我在缺少值方面遇到了一些麻烦。

#sample data
test <- c(-1.2, 4.6, -8.3, 5, 8, 1, -2, NA, NA, NA, -3, 5.1, 1.9)
test <- as.data.frame(test)

#This gives NA after NAs occurred
sum_test <- lapply(test, FUN=cumsum)

sum_test
$test
[1] -1.2 3.4 -4.9 0.1 8.1 9.1 7.1 NA NA NA NA NA NA

#This continues with adding to pre-NA value after last NA
sum_test <- lapply(test, function(x) ave(x, is.na(x), FUN=cumsum))

sum_test
$test
[1] -1.2 3.4 -4.9 0.1 8.1 9.1 7.1 NA NA NA 4.1 9.2 11.1

然而,我想要实现的是在 NAs cumsum 重新开始之后:

-1.2  3.4 -4.9  0.1  8.1  9.1  7.1   NA   NA   NA -3   2.1   4

这可以做到吗?

最佳答案

这里 g 定义了一个分组变量,然后我们对每个组分别应用 cumsum:

test <- c(-1.2, 4.6, -8.3, 5, 8, 1, -2, NA, NA, NA, -3, 5.1, 1.9)
g <- cumsum(is.na(head(c(0, test), -1)))
ave(test, g, FUN = cumsum)

给出:

[1] -1.2  3.4 -4.9  0.1  8.1  9.1  7.1   NA   NA   NA -3.0  2.1  4.0

添加:请注意 head(c(0, test), -1) 只是滞后于 test 所以 dplyr 的 lag 函数可以用来稍微缩短这个:

library(dplyr)
ave(test, cumsum(is.na(lag(test))), FUN = cumsum)

关于r - cumsum 在 NA 之后重新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21628105/

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