gpt4 book ai didi

r - 如何仅在它们之间的时间间隔很小时对序列中的数字求和

转载 作者:行者123 更新时间:2023-12-01 09:59:11 25 4
gpt4 key购买 nike

这是我想做的非常简单的事情:如果时间彼此接近,我想将数字相加,否则我想保留数字。我手动设置的时间限制决定了它们之间的距离(这里是 0.03)。然后我想存储这些数字以供进一步操作。我想运行它,如果 1.23 和 1.24 符合我想添加 1+2 的条件,但我想比较 1.24 和 1.25,它们也满足条件,那么 1+2+1,依此类推.一旦他们不再接近,我会存储这个号码并继续前进。然后输出向量的大小会更小。这是我想要的输出

输出 = (1 + 2 + 1 + 5, 3 + 4, 11 + 13, 25 + 1, 11, 7)

输出 = (9, 7, 24, 26, 11, 7)

这是我目前所拥有的:

v1 <- c(1,2,1,5,3,4,11,13, 25, 1)
t1 <- c(1.23, 1.24, 1.25, 1.28, 2.28, 2.29, 2.90, 2.91, 3.11, 3.12)

i<-1
j<-2
sums <- NULL
tot <- NULL
while (j <= length(v1))
{
if (t1[j] - t1[i] < 0.03)
{
sums[i] <- v1[i] + v1[j]
}
if (t1[j] - t1[i] > 0.03)
{
tot[i] <- v1[i]
}
i = i + 1
j = j + 1
}

最佳答案

以下应该有效:

v1 <- c(1,2,1,5,3,4,11,13, 25, 1)
t1 <- c(1.23, 1.24, 1.25, 1.28, 2.28, 2.29, 2.90, 2.91, 3.11, 3.12)
threshold <- 0.02

fac <- c(1, cumsum(diff(t1) > threshold) + 1)
as.vector(tapply(v1, fac, sum))

给出:

# [1]  4  5  7 24 26

如果你想根据你的评论中的建议计算这个输出的东西,你应该把它存储在一个数据框中。例如:

df <- data.frame(v1, t1)
df$fac <- c(1, cumsum(diff(t1) > threshold) + 1)
library(plyr)
df2 <- ddply(df, "fac", summarize, v1=sum(v1), t1=min(t1))
df2$time <- cut(df2$t1, breaks=1:4)

这会给出:

R> df2
fac v1 t1 time
1 1 4 1.23 (1,2]
2 2 5 1.28 (1,2]
3 3 7 2.28 (2,3]
4 4 24 2.90 (2,3]
5 5 26 3.11 (3,4]

关于r - 如何仅在它们之间的时间间隔很小时对序列中的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976003/

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