有没有一个函数可以计算给定条件的行数?

问题描述 投票:0回答:1

有没有一种方法可以让我使用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
r dplyr mutate
1个回答
0
投票

你需要一个组来划分你的不同速度,你的例子基本上是重复的,但是我们说。

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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.