楼主: xingzhaoh
21313 19

[问答] 如何每隔5行求取一次最大值和平均数 [推广有奖]

11
calsunny 发表于 2015-9-9 22:49:44 |只看作者 |坛友微信交流群
  1. set.seed(1)
  2. aa <- rnorm(3000)
  3. bb <- matrix(aa,600,5,byrow=TRUE)
  4. apply(bb,1,mean)
复制代码

使用道具

12
randy_van 发表于 2018-5-14 14:30:07 |只看作者 |坛友微信交流群
cheetahfly 发表于 2015-9-9 10:28
R语言自带rollapply()函数可以达到你的要求,
比如:
在Clifford S. Ang的著作《Analyzing Financial Dat ...
请问如果想对每一行求和,是不是把mean改成sum就可以了?

使用道具

13
randy_van 发表于 2018-5-14 14:30:08 |只看作者 |坛友微信交流群
cheetahfly 发表于 2015-9-9 10:28
R语言自带rollapply()函数可以达到你的要求,
比如:
在Clifford S. Ang的著作《Analyzing Financial Dat ...
请问如果想对每一行求和,是不是把mean改成sum就可以了?

使用道具

14
randy_van 发表于 2018-5-14 14:30:29 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2013-7-11 08:46
假设数据里面正好有3000行数,存为x(确保x是一个vector,而不是data.frame)

y
请问如果想对每一行求和,是不是把mean改成sum就可以了?

使用道具

15
cheetahfly 在职认证  发表于 2018-5-14 14:58:23 |只看作者 |坛友微信交流群
randy_van 发表于 2018-5-14 14:30
请问如果想对每一行求和,是不是把mean改成sum就可以了?
是的
直接用rowSums()和rowMeans()效率更高

使用道具

16
BG4IMP 发表于 2018-5-15 14:55:43 |只看作者 |坛友微信交流群

RE: 如何每隔5行求取一次最大值和平均数

初学R,试试我的基础方法:
df=data.frame(x)
n=1:dim(df)[1]
df$m=n%%5+1
最大值:
dfmax=aggregate(df[,1:4],by=list(df$m),max)
平均值:
dfmean=aggregate(df,by=list(df$m),mean)

使用道具

17
amydiary 企业认证  发表于 2018-12-26 11:28:30 |只看作者 |坛友微信交流群
cheetahfly 发表于 2015-9-9 10:28
R语言自带rollapply()函数可以达到你的要求,
比如:
在Clifford S. Ang的著作《Analyzing Financial Dat ...
这个是移动平均数的意思,但不是每隔5行加总。也就是得到的不是600个数,是2997个数。

使用道具

18
love丽 发表于 2018-12-27 21:11:40 来自手机 |只看作者 |坛友微信交流群
首先新增加两列用于存数据,写一个for 循环,把结果赋值给新的列

使用道具

qoiqpwqr 发表于 2013-7-10 11:15
把你的数据读入后变成一个5列的矩阵。第一行就是1-5的数,第二行就是6-10的数,。。。

然后就可以用appl ...
收下膝盖

使用道具

20
oliyiyi 发表于 2023-9-9 13:28:07 |只看作者 |坛友微信交流群
  1. # 生成示范数据
  2. df <- data.frame(var1=rnorm(3500))

  3. # 每隔5行分组
  4. df$group <- rep(1:(nrow(df)%/%5), each=5)

  5. # 按组求最大值
  6. library(dplyr)
  7. df %>%
  8.   group_by(group) %>%
  9.   summarise(max=max(var1),
  10.             mean=mean(var1))
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 12:01