gpt4 book ai didi

r - 如何识别R中列中的模式并为所述模式提供身份

转载 作者:行者123 更新时间:2023-12-04 00:16:50 25 4
gpt4 key购买 nike

我有一个潜水数据集(由连接到潜水鸟的时间深度记录器捕获),其中包括许多其他变量、潜水深度、潜水持续时间和潜水后持续时间(开始另一次潜水前的休息时间)。我一直在尝试做的(未成功)是识别潜水回合,即在设定的时间段内发生的多次潜水,之间有一定的时间。例如,如果前 4 次的潜水后持续时间小于 300 秒,而第 5 次的潜水时间大于 300 秒,则连续 5 次潜水将被视为一次潜水。第 6 次潜水将被视为新一轮的开始,结束将是下一次潜水后持续时间 >300 秒的潜水。我确信有一个简单的解决方案来识别这样的模式,但我真的不知道如何在 R 中解决这个问题。如果可能的话,我还希望对每个回合进行编号并放置在一个标有“BoutID”的新列中.任何人都可以提出任何建议吗?查看我正在寻找的输出示例。
谢谢!

divedepth <- c(10, 11, 13, 12, 15, 25, 30, 5, 7, 3, 10)
divetime <- c(60, 50, 45, 45, 30, 50, 25, 10, 50, 30, 33)
postdivetime <- c(5, 10, 3, 5, 301, 1, 4, 7, 305, 10, 301)
boutID <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3)
dives <- data.frame(divedepth, divetime, postdivetime, boutID)

dives
divedepth divetime postdivetime boutID
1 10 60 5 1
2 11 50 10 1
3 13 45 3 1
4 12 45 5 1
5 15 30 301 1
6 25 50 1 2
7 30 25 4 2
8 5 10 7 2
9 7 50 305 2
10 3 30 10 3
11 10 33 301 3

最佳答案

您可以使用 cumsum并通过使用 head 获取除最后一个向量之外的所有向量

 dives$boutid = 1 + c(0, head(cumsum(dives$postdivetime>300), -1))
dives
divedepth divetime postdivetime boutID boutid
1 10 60 5 1 1
2 11 50 10 1 1
3 13 45 3 1 1
4 12 45 5 1 1
5 15 30 301 1 1
6 25 50 1 2 2
7 30 25 4 2 2
8 5 10 7 2 2
9 7 50 305 2 2
10 3 30 10 3 3
11 10 33 301 3 3

关于r - 如何识别R中列中的模式并为所述模式提供身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63109461/

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