全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2447 7
2018-04-22

时间序列,当变量x为1时,y的值替换为前七天的移动平均值?求问大神代码怎么写?


for(i in 1:547)#从1到547的547次循环

{

if  (ED$holiday(i)==1)

EDA=ma((EDA[i-1], EDA[i-2)],EDA[i-3],EDA[i-4],EDA[i-5],EDA[i-6],EDA[i-7]),7)

EDA

}


这是我自己写的代码,运行后显示如下,求指点~

“Error: unexpected ',' in:

"    if  (ED$holiday(i)==1)

        EDA=ma((EDA[i-1],"”


二维码

扫码加我 拉你入群

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

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

全部回复
2018-4-22 16:26:27
install.packages('TTR')
install.packages('dplyr')
library(dplyr)
library(TTR)

df <- data.frame(x=range(1,20),y = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))
df

data=df%>%mutate(z=runMean(y, n = 7, cumulative = FALSE))%>%mutate(y=if_else(x==1,z,y))%>%select(-z)
data
二维码

扫码加我 拉你入群

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

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

2018-4-22 16:47:07
rainningpoet 发表于 2018-4-22 16:26
install.packages('TTR')
install.packages('dplyr')
library(dplyr)
您好!
df <- data.frame(x=ED$holiday,y=ED$EDA)
df
#这个是创建数据框
data=df%>%mutate(z=runMean(y, n = 7, cumulative = FALSE))%>%mutate(y=if_else(x==1,z,y))%>%select(-z)
#这个是将y替换为7天移动平均的值

运行后,R stdio显示“Error in mutate_impl(.data, dots) :
  Evaluation error: `false` must be type double, not integer.”

请问这个怎么解决?
  x    y
1   1  720
2   1  721
3   1  417
4   0  459
5   0  483
6   0  406
7   0  407
8   0  477
9   0  463
10  0  506
11  0  411
12  0  424
13  0  456
14  0  443
15  0  571
16  0  488
17  0  538
18  0  479
19  0  519
20  0  463
21  0  446
22  1  550
23  1  711
24  1  838
25  1  787
26  1  575
27  1  521
28  1  534
29  0  536
30  0  459
31  0  459
32  0  560
33  0  524
34  0  595
35  0  622
36  0  668
37  0  510
38  0  513
39  0  588
40  0  533
41  0  592
42  0  560
43  0  624
44  0  641
45  0  571
46  0  692
47  0  574
48  0  590
49  0  561
50  0  649
51  0  663
52  0  612
53  0  552
54  0  504
55  0  572
56  0  586
57  0  694
58  0  654
59  0  628
60  0  541
61  0  629
62  0  616
63  0  612
64  0  629
65  0  543
66  0  590
67  0  636
68  0  575
69  0  583
70  0  625
71  0  608
72  0  605
73  0  678
74  0  675
75  0  719
76  0  637
77  0  663
78  0  698
79  0  674
80  0  680
81  0  601
82  0  661
83  0  634
84  0  658
85  0  784
86  0  674
87  0  754
88  0  697
89  0  667
90  0  728
91  0  659
92  0  628
93  1  579
94  1  640
95  1  967
96  0  654
97  0  642
98  0  638
99  0  638
这是我的部分数据,由于太多,就不全po了。非常感谢您热心而及时的回答!
二维码

扫码加我 拉你入群

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

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

2018-4-22 18:19:27
z y 的 type 是不是一样的。


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

df <- data.frame(x=range(1,20),y = c(10,14,3,4,15,9,12,6,7,8,10,13,12,6,8,8,9,3,14,10))
df

data=df%>%mutate(z=runMean(y, n = 7, cumulative = FALSE))%>%mutate(y=if_else(x==1,as.numeric(z),as.numeric(y)))%>%select(-z)
data
二维码

扫码加我 拉你入群

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

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

2018-4-22 18:20:57
rainningpoet 发表于 2018-4-22 18:19
z y 的 type 是不是一样的。
z我的理解是z=y七天移动平均后的值吗?不太清楚z指代什么。请原谅我的愚钝,可以麻烦您再解释一下吗?
二维码

扫码加我 拉你入群

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

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

2018-4-22 18:31:07
是的。
mutate(z=runMean(y, n = 7, cumulative = FALSE))  #计算过去7天的平均
mutate(y=if_else(x==1,as.numeric(z),as.numeric(y))) #当x是1 的时候就用z
select(-z) #删掉z
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群