楼主: hkhorsetrack
1271 5

[问答] 如何計出浮动平均數 [推广有奖]

  • 0关注
  • 0粉丝

本科生

15%

还不是VIP/贵宾

-

威望
0
论坛币
49 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
336 点
帖子
26
精华
0
在线时间
95 小时
注册时间
2018-4-5
最后登录
2020-6-13

楼主
hkhorsetrack 发表于 2018-4-22 13:16:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大大好,

假如 df 有以下数据,


index

name

amount

1

A

10

2

B

14

3

C

3

4

A

4

5

A

15

6

C

9

7

B

12

8

B

8

8

C

6

9

A

7

10

B

8

11

C

10

12

A

13

13

B

14

14

C

8

15

A

12

16

C

9

17

A

6

18

C

10

19

A

3



df <- data.frame(index = 1:20, name = c("A", "B", "C", "A", "A", "C", "B", "C", "A", "B", "C", "A", "A", "A", "C", "B", "C", "A", "B", "C"), amount = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))

index

name

amount

last3avg

1

A

10

NA

2

B

14

NA

3

C

3

NA

4

A

4

NA

5

A

15

9.667

6

C

9

NA

7

B

12

NA

8

B

8

11.333

8

C

6

6.000

9

A

7

8.667

10

B

8

9.333

11

C

10

8.333

12

A

13

11.667

13

B

14

10.000

14

C

8

8.000

15

A

12

10.667

16

C

9

9.000

17

A

6

10.333

18

C

10

9.000

19

A

3

7.000



如何計出, A,B,C "近三次"平均amount, 不足3次出na值

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:amount Index name AMO eam

沙发
rainningpoet 发表于 2018-4-22 15:48:00
这个是 moving average 的内容吧

install.packages('TTR')
library(dplyr)
library(TTR)

df <- data.frame(index = 1:20, name = c("A", "B", "C", "A", "A", "C", "B", "C", "A", "B", "C", "A", "A", "A", "C", "B", "C", "A", "B", "C"), amount = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))

all_data=data.frame()
for (a in unique(df$name)){
data=df%>%filter(name==a)%>%mutate(last3avg=runMean(amount, n = 3, cumulative = FALSE))  
all_data=rbind(data,all_data)
}

all_data=all_data%>%arrange(index)
all_data
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
jinkelazzz 发表于 2018-4-22 15:53:04
微信图片_20180422161041.png

微信图片_20180422155217.png (42.68 KB)

微信图片_20180422155217.png

板凳
hkhorsetrack 发表于 2018-4-22 16:21:45
感謝 rainningpoet 兄的回答, 效果是我想要的, 謝謝.

另外, 亦多謝jinkelazzz兄在EXCEL 的見解,
我提問沒有說清楚是用 R, 真不好意思, 但十分多謝熱心的前輩

报纸
hkhorsetrack 发表于 2018-5-1 23:39:26
rainningpoet 兄,

df <- data.frame(index = 1:20, name = c("A", "B", "C", "A", "A", "C", "B", "C", "A", "B", "C", "A", "A", "A", "C", "B", "C", "A", "B", "D"), amount = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))

如果我name第20項, 改為"D", 你的公式就沒法远作了, 請問有其他解決方法嗎 ?

地板
rainningpoet 发表于 2018-5-2 00:31:20
因为D不够3位。

library(dplyr)
library(TTR)

df <- data.frame(index = 1:20, name = c("A", "B", "C", "A", "A", "C", "B", "C", "A", "B", "C", "A", "A", "A", "C", "B", "C", "A", "B", "D"),
                 amount = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))


all_data=data.frame()
for (a in unique(df$name)){
  if (nrow(df%>%filter(name==a))<3){
  data=df%>%filter(name==a)%>%mutate(last3avg=NA)
  }else{
  data=df%>%filter(name==a)%>%mutate(last3avg=runMean(amount, n = 3, cumulative = FALSE))
  }
  all_data=rbind(data,all_data)
}

all_data=all_data%>%arrange(index)
all_data

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 00:51