R 子集数据,求最大值、最小值、平均值并绘制

R 子集数据,求最大值、最小值、平均值并绘制,r,R,因此,我的数据如下: id expressions mode 1 22 0 2 24 0 3 23 0 4 5 1 5 56 1 6 42 1 7 32 0 8 21 0 9 11 1 10 72 1 因此,我将根据前面的问题得到一个新表: id max me

因此,我的数据如下:

id expressions mode 
1      22       0
2      24       0
3      23       0
4      5        1
5      56       1
6      42       1
7      32       0
8      21       0
9      11       1
10     72       1
因此,我将根据前面的问题得到一个新表:

id     max     mean    min    mode 
1       24      23      22      0
2       56      51      5       1
3       32      26      21      0
4       72      41      11      1

因此,基本上是使用变量窗口滚动应用函数,该函数在切换发生时考虑一个窗口,这在输出中,我已经显示。

我们可以使用
data.table
根据“mode”的运行长度id进行分组操作,并获得“expressions”的
max/mean/min/mode

library(data.table)
setDT(df1)[, .(Max = max(expressions), Mean = round(mean(expressions)),
    Min = min(expressions)), .(id = rleid(mode), mode)]
#    id mode Max Mean Min
#1:  1    0  24   23  22
#2:  2    1  56   34   5
#3:  3    0  32   26  21
#4:  4    1  72   42  11

或使用
tidyverse

library(dplyr)
df1 %>%
   group_by(id = cumsum(c(TRUE, diff(mode) != 0)), mode) %>% 
   summarise_at(vars(expressions), funs(max, mean= round(mean(.)), min))
#      id  mode   max  mean   min
#   <int> <int> <dbl> <dbl> <dbl>
#1     1     0    24    23    22
#2     2     1    56    34     5
#3     3     0    32    26    21
#4     4     1    72    42    11
库(dplyr)
df1%>%
分组人(id=cumsum(c(TRUE,diff(mode)!=0)),mode)%>%
总结(变量(表达式)、funs(最大值、平均值=四舍五入(平均值()、最小值))
#id模式最大平均最小值
#       
#1     1     0    24    23    22
#2     2     1    56    34     5
#3     3     0    32    26    21
#4     4     1    72    42    11

我认为
mean
的第二个值应该是34,即
mean(c(5,56,42))35;[1]34.33333
非常感谢Jaap的编辑。很抱歉延迟了回复,但非常感谢,它工作得非常好。干杯@阿克伦