R 数据帧中的新变量

R 数据帧中的新变量,r,dataframe,average,R,Dataframe,Average,我有一个时间序列价格的数据框架,我希望在数据框架内有一个新的列,它是前10次价格观察的平均值。因此,该新变量必须从第10行开始滚动,即观察值10是前10个价格观察值1-10的平均值,观察值11是前10个价格观察值2-11的平均值,依此类推 使用从gtools包运行: #the first 9 rows are blank for (i in 1:9) { average[i]=NA } for (i in 1:(length(prices)-9)) { average[i+9

我有一个时间序列价格的数据框架,我希望在数据框架内有一个新的列,它是前10次价格观察的平均值。因此,该新变量必须从第10行开始滚动,即观察值10是前10个价格观察值1-10的平均值,观察值11是前10个价格观察值2-11的平均值,依此类推

使用从gtools包运行:

#the first 9 rows are blank
for (i in 1:9)
{
     average[i]=NA
}
for (i in 1:(length(prices)-9))
{
     average[i+9]=mean(prices[i:(i+9)])
}
或者如果您更喜欢同时使用gtools和dplyr。同样的结果

library(gtools); library(dplyr)
df <- data.frame(x=round(runif(12,1,10)))
df %>% mutate(RunningMean = running(x, width=10, pad=TRUE, fun=mean))
或者只需使用过滤器,无需加载额外的软件包:

set.seed(123)
df <- data.frame(x=round(runif(12,1,10)))
n <- 10

df <- within(df,{
  runmean <- filter(x,rep(1/n,n), sides=1)
})
另一个提示:如果您希望在数据框内执行此操作,并且不希望一直键入这些美元符号,请使用方便的函数,就像我在示例中所做的那样。别忘了把参数sides=1,否则你将取以默认值为中心的平均值。

你可以用@KFB的例子使用zoo。使用align参数,可以指定NAs占用的左侧、右侧或中心位置

 library(zoo) 
 rollmean(df$x, k=10,na.pad=TRUE, align="right")
 #[1]  NA  NA  NA  NA  NA  NA  NA  NA  NA 6.2 6.8 6.5

试试看移动平均线,你会发现这样的问题:或者试试librarygtools,运行函数:例如runningdata,width=10,pad=TRUE,fun=mean?顺便说一句,欢迎继续。人们总是愿意帮助你,但是你必须先做一些努力来解决问题。关于滚动平均数有很多信息。所以,首先尝试一下,如果你不能让它工作,给我们一个可复制的例子和你想要实现的,我们很乐意帮助你。有很多问题。首先,不要在R中增加向量,这对你的记忆来说是很慢的。第二,R中有矢量化的解决方案,所以不需要自己实现。第三,如果你想自己做,把所有的东西都封装在一个函数中,这样它就不会改变你的全局工作区。
 library(zoo) 
 rollmean(df$x, k=10,na.pad=TRUE, align="right")
 #[1]  NA  NA  NA  NA  NA  NA  NA  NA  NA 6.2 6.8 6.5