我有一个数据集,每个日期可能包含多个观察结果。因此,在date1上可以有5个观察,在date2上可以有2个观察,在group3上可以有1个观察。
我想计算移动平均线 - 按日期 - 并且重要的是,虽然没有总结/减少'行数。那就是在上面这个例子中,我仍然会有8行数据,并且在它旁边的一列中我会得到那个日期的滚动平均价格,我觉得这很有挑战性,因为当我使用ZOO包中的典型滚动功能时,它会排成一行-line,我不知道如何让它在DATE跳过
例如,第一步通常是:
NA
---但总结让我失去了行。
df %>% groupy_by(DATE) %>% summarise(mean_daily_price = mean(price)) %>% ungroup() %>% arrange(Date) %>% mutate( ra = rollapply(price, 2, mean, partial=T)
答案 0 :(得分:1)
在下面的代码中,我们使用var countrystring = '?country=" + countrySelected;
// code to make var querystring = the rest of
// the requirements for the country to do something
// and your code to verify what the user has entered
addstring = countrystring + querystring;
window.location = window.location.href +addstring;
代替mutate
来添加summarise
,以便我们保留数据框的所有行。然后,在最后的mean_daily_price
中,我们仅针对mutate
的唯一值运行rollapply
,然后使用mean_daily_price
和table
重复rep
的输出1}}按每个rollapply
的行数。
Date
DF %>% arrange(Date) %>% group_by(Date) %>% mutate(mean_daily_price = mean(Price)) %>% ungroup() %>% mutate(ra = rep(rollapply(unique(mean_daily_price), 2, mean, fill=NA, align="right"), table(Date)[order(unique(Date))]))
答案 1 :(得分:0)
我认为您最安全的方法需要分两个步骤 - 按.leftSidebar
计算滚动平均值,然后将它们合并(在此处仍然使用Date
)
dplyr
给出:
rolledAvg <-
DF %>%
group_by(Date) %>%
summarise(mean_daily_price = mean(Price)) %>%
ungroup() %>%
arrange(Date) %>%
mutate( ra = rollapply(mean_daily_price
, 2
, mean
, partial=T
, fill = NA))
left_join(DF, rolledAvg)
我在评论中看到另一个答案,您认为第一个 Date Price Average.by.Date Moving_Average_Size_2 mean_daily_price ra
1 Jan-13 100 400 NA 400 250
2 Jan-13 200 400 NA 400 250
3 Jan-13 300 400 NA 400 250
4 Jan-13 1000 400 NA 400 250
5 Jan-13 400 400 NA 400 250
6 Jul-14 150 100 250 100 350
7 Jul-14 50 100 250 100 350
8 Oct-16 600 600 350 600 600
应该是250 - 如果是这种情况,请将您的调用计算更改为ra
。现在,它似乎表现得像预期/记录。所以,如果你想要不同的东西,你需要解释你想要的改变(可能是一个单独的问题)。
另一个警告,对于偶然发现的其他读者来说尤其重要:这种当前方法将连续日期条目视为等距,无论它们实际距离多远。如果这适合您的需要,那很好。但是,在许多使用案例中,您可能需要注意测量之间的实际时间量。
类似地,当前的方法丢失了所有测量数据的信息,可能值得考虑一种按观察次数加权的方法(除非你很乐意相信每天的计算平均值)。