有没有一种方法可以让我使用mutate()得到这个想要的输出?我们的想法是计算Speed列的每个序列中大于5.5的连续值的数量。理想情况下,最好还能得到一个能确定 "开始 "和 "结束 "的函数。例如,在这个例子中,它将在5.5开始,在5.9结束。
Speed <- c(0.1, 0.2, 1.2, 1.5, 2.8, 5.5, 5.6, 5.7, 5.8, 5.9, 0.1, 0.2, 1.2, 1.5, 2.8, 5.5, 5.6, 5.7, 5.8, 5.9)
Number <- c(0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5)
df <- data.frame(Speed, Number)
df
Speed Number
1 0.1 0
2 0.2 0
3 1.2 0
4 1.5 0
5 2.8 0
6 5.5 1
7 5.6 2
8 5.7 3
9 5.8 4
10 5.9 5
11 0.1 0
12 0.2 0
13 1.2 0
14 1.5 0
15 2.8 0
16 5.5 1
17 5.6 2
18 5.7 3
19 5.8 4
20 5.9 5
你需要一个组来划分你的不同速度,你的例子基本上是重复的,但是我们说。
df %>%
mutate(group=cumsum(Speed==0.1)) %>%
group_by(group) %>%
mutate(Number=cumsum(Speed>5))
# A tibble: 20 x 3
# Groups: group [2]
Speed Number group
<dbl> <int> <int>
1 0.1 0 1
2 0.2 0 1
3 1.2 0 1
4 1.5 0 1
5 2.8 0 1
6 5.5 1 1
7 5.6 2 1
8 5.7 3 1
9 5.8 4 1
10 5.9 5 1
11 0.1 0 2
12 0.2 0 2
13 1.2 0 2
14 1.5 0 2
15 2.8 0 2
16 5.5 1 2
17 5.6 2 2
18 5.7 3 2
19 5.8 4 2
20 5.9 5 2
要得到最小值和最大值
df %>%
mutate(group=cumsum(Speed==0.1)) %>%
group_by(group) %>%
mutate(Number=cumsum(Speed>5)) %>%
filter(Number>0) %>%
summarise(start=min(Speed),end=max(Speed))
# A tibble: 2 x 3
group start end
<int> <dbl> <dbl>
1 1 5.5 5.9
2 2 5.5 5.9