我有一个时间序列价格的数据框,我想要在数据框内有一个新的列,它是前面10个价格观察值的平均值。因此,这个新变量必须从第10行开始滚动,即观察值10是前10个价格的平均值(观测值1-10),观测值11是前10个价格的平均值(观测值2-11)等等。数据框中的新变量
Q
数据框中的新变量
-1
A
回答
-1
#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)])
}
+1
有很多事情有问题。首先,不要在R中生长载体,这对于你的记忆来说是缓慢和地狱。其次,R中有矢量化解决方案,因此无需自行实施。第三,如果你想自己做,把所有东西都包装在一个函数中,这样它就不会改变你的全局工作空间中的东西。 – 2014-10-22 09:09:13
1
使用running()
从gtools
包:
#dummy data
set.seed(123)
df <- data.frame(x=round(runif(12,1,10)))
require(gtools)
#get running mean starting on 10th row
df$RunningMean <- running(df$x,width = 10,pad=TRUE)
df
#output
x RunningMean
1 4 NA
2 8 NA
3 5 NA
4 9 NA
5 9 NA
6 1 NA
7 6 NA
8 9 NA
9 6 NA
10 5 6.2
11 10 6.8
12 5 6.5
或者,如果你喜欢使用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))
1
或者干脆用filter
它允许你做,没有加载额外的软件包:
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)
})
另一个秘诀:如果你想要做一个数据帧中,你不希望在整个过程中键入这些美元符号,请使用方便的功能within()
,正如我在示例中所做的那样。不要忘记把参数sides=1
,否则你会采取以你的价值为中心(这是默认值)。
1
你可以使用zoo
(使用@KFB的例子)。使用align
参数,您可以指定left
,right
或center
为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
相关问题
- 1. 通过比较数据框中的现有变量添加新变量
- 2. 如何根据现有变量创建新的r数据框变量
- 3. 将新变量添加到数据框中的特定位置
- 4. 从数据框中的变量中提取文本并创建新的向量
- 5. 子集。在数据框中创建/清除新变量;当我子集,而不是在新的数据框
- 6. R数据框内的变量总和
- 7. 子集数据框由系数变量
- 8. Vue.js更新数据属性变量中的ajax数据
- 9. 创建日期数据的新变量
- 10. 的Session变量更新数据两次
- 11. 更新数据库wordpress的foreach变量
- 12. 将新变量(列)动态添加到Shiny中的反应数据框中
- 13. 从python变量载入数据到熊猫数据框中
- 14. 如何使用更新数量输入框更新$ _SESSION变量
- 15. 根据其他变量计数数据帧中的变量
- 16. 在数据框中用NaN替换可变数量的星号
- 17. 当数据库中的数据发生变化时更新变量
- 18. R - 将(变量)的新变量添加到满足多个条件的数据框中
- 19. 如何遍历数据框中的列子集以创建新变量
- 20. 在R中创建新列时引用一个变量名称的数据框
- 21. 在R条件下在数据框中的其他列创建新变量
- 22. 将列表变量列表转换为数据框架中的多个变量
- 23. 在R中的多个数据框中命名变量
- 24. 如何识别R中数据框中的变量类型?
- 25. 变量函数中的变量数据类型参数
- 26. 数据表JS变量不被更新
- 27. 从PHP变量更新DB数据
- 28. Angularjs +停止更新数据到变量
- 29. 使用变量更新数据库表
- 30. 根据矢量向数据框添加几个变量
尝试寻找的“移动平均”,等你发现这样的问题:http://stackoverflow.com/questions/743812/calculating-moving-average-in-r – 2014-10-22 09:05:31
或者试试库(gtools) running()函数:例如运行(data,width = 10,pad = TRUE,fun = mean)。 ?运行 – KFB 2014-10-22 09:06:59
顺便一提,欢迎来到SO。人们总是愿意提供帮助,但您必须至少努力尝试首先解决问题。有很多关于滚动平均值的信息。因此,请先尝试一下,如果无法实现,请给我们一个可重复的例子以及您想实现的目标,我们很乐意为您提供帮助。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2014-10-22 09:07:15