我必须找出一个变量每10分钟超过其阈值的时间。在下面,变量Threshold Event表示0或1。 1表示超出阈值,而0表示正常。
可变的是汽车速度,因此,如果其超过极限(例如35 kmph),它将在一段时间内再次保持在该极限之上,然后速度再次降至正常(0)。因此,我需要排除此类连续事件,并且每次超过该限制时仅将其计为一次。
有人可以帮忙吗?。我尝试使用var cars1 = [
{id: 1, make: "Ford", model: "F150", year: 2002},
{id: 3, make: "Chevy", model: "Tahoe", year: 2003},
];
var cars2 = [
{id: 2, make: "Kia", model: "Optima", year: 2001},
{id: 4, make: "Nissan", model: "Sentra", year: 1982},
];
const cars1IDs = new Set(cars1.map(({ id }) => id));
const combined = [
...cars1,
...cars2.filter(({ id }) => !cars1IDs.has(id))
.map(({ id, make }) => ({ id, make, type: 'car' }))
];
combined.sort((a, b) => a.id - b.id);
console.log(combined);
过滤条件并将其置于阈值附近,但是我无法成功。
样本数据
dplyr
............................................... ..............
输出应为
Timestamp Speed Threshold
1 2014-04-03 09:23:57 30.07929 0
2 2014-04-03 09:23:55 35.63192 1
3 2014-04-03 09:23:59 34.92283 0
. .
. .
4 2014-04-03 09:33:01 37.30859 1
5 2014-04-03 09:33:02 38.58576 1
6 2014-04-03 09:33:03 39.51970 1
7 2014-04-03 09:33:04 38.02424 1
8 2014-04-03 09:33:05 33.12697 0
9 2014-04-03 09:33:39 30.21950 0
10 2014-04-03 09:33:40 31.27000 0
11 2014-04-03 09:33:41 32.00667 1
12 2014-04-03 09:33:42 32.94374 1
13 2014-04-03 09:33:43 33.25141 1
14 2014-04-03 09:33:44 32.76980 1
15 2014-04-03 09:33:45 30.11010 0
16 2014-04-03 09:33:56 31.63525 0
17 2014-04-03 09:33:57 34.61222 0
18 2014-04-03 09:33:58 37.52020 1
19 2014-04-03 09:33:59 40.48424 1
20 2014-04-03 09:34:00 43.43828 0
答案 0 :(得分:1)
如果要从第3分钟开始每10分钟将其分组,您可以这样操作:
library(tidyverse)
library(lubridate)
df %>%
group_by(Timestamp = str_sub(ymd_hms(Timestamp) - minutes(3), 1, 15)) %>%
summarise(Count = sum(Treshhold)) %>%
mutate(Timestamp = str_c(Timestamp, '3'))
答案 1 :(得分:1)
我们可以将group_by
列中的CAR_ID
cut
和Timestamp
分为“每10分钟”的组,并计算值超过Threshold
的次数分别使用rle
(不包括连续的小肠)。
library(dplyr)
df %>%
group_by(CAR_ID, group = cut(Timestamp, breaks = "10 mins")) %>%
summarise(Count = sum(with(rle(Threshold), values == 1)))
确保Timestamp
列属于datetime
或POSIXct
类,而不是字符串。