gpt4 book ai didi

r - 按行在 R 中累积

转载 作者:行者123 更新时间:2023-12-04 11:26:08 26 4
gpt4 key购买 nike

您好,我正在尝试在 R 中做一个简单的累积模型。在 excel 中做起来非常简单,但当然我需要为大约 1000 个数据集做这件事,所以我想在 R 中编写代码。

简单来说就是积雪和融雪的模型。结果应在“包”列中。这应该只是前几天的包裹+雪融化。关于调用前几天包的最佳方式有什么想法吗? (应该在第 1 天以 0 积雪开始)

第二个问题是 pack 不能为负,所以在融化但没有积雪的日子里,pack 应该保持为 0。

df <- read.csv(file = "ddf_mod.csv", header = TRUE)
> df
day snow melt pack
1 1 0 6 0
2 2 0 2 0
3 3 0 8 0
4 4 0 2 0
5 5 2 0 2
6 6 3 0 5
7 7 4 0 9
8 8 5 0 14
9 9 0 5 9
10 10 0 6 3
11 11 0 3 0
12 12 5 0 5
13 13 8 0 13
14 14 1 0 14
15 15 3 0 17
16 16 0 0 17

最佳答案

它不能低于 0 的部分使这比正常情况有点棘手,但您可以使用 Reduce() 完成此逐步计算。例如

new_melt <- Reduce(function(prev, change) {
max(prev + change$snow - change$melt, 0)
},
split(df[c("snow","melt")], seq.int(nrow(df))),
init=0,
accumulate = TRUE)[-1]

在这里,我们使用 split() 将雪/融化值拆分为观察值对列表,然后迭代它们。每次取前一个值,添加雪,去除融化,并使用 max() 确保它永远不会低于 0。(然后我们使用 [-1]< 删除初始值)。 Can 可以将这个新值与原始数据合并,看看它是否给出了你想要的结果

cbind(df, new_melt)
# day snow melt pack new_melt
# 1 1 0 6 0 0
# 2 2 0 2 0 0
# 3 3 0 8 0 0
# 4 4 0 2 0 0
# 5 5 2 0 2 2
# 6 6 3 0 5 5
# 7 7 4 0 9 9
# 8 8 5 0 14 14
# 9 9 0 5 9 9
# 10 10 0 6 3 3
# 11 11 0 3 0 0
# 12 12 5 0 5 5
# 13 13 8 0 13 13
# 14 14 1 0 14 14
# 15 15 3 0 17 17
# 16 16 0 0 17 17

关于r - 按行在 R 中累积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865898/

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