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的编辑。很抱歉延迟了回复,但非常感谢,它工作得非常好。干杯@阿克伦