我有一个像这样的数据框“foo”
Date Return
1998-01-01 0.02
1998-01-02 0.04
1998-01-03 -0.02
1998-01-04 -0.01
1998-01-05 0.02
...
1998-02-01 0.1
1998-02-02 -0.2
1998-02-03 -0.1
etc.
我想在这个数据框中添加一个新列,显示相应返回的密度值。我试过了:
foo$density <- for(i in 1:length(foo$Return)) density(foo$Return,
from = foo$Return[i], to = foo$Return[i], n = 1)$y
但它没有用。我真的很难将“函数”应用于每一行。但也许还有另一种方法可以做到,而不是使用密度()?
我本质上想做的是将密度()中的拟合密度值提取到 foo 中的返回值。如果我只是做 plot(density(foo$Return)) 它会给我曲线,但是我希望将密度值附加到返回上。
@乔里斯:
foo$density <- density(foo$Return, n=nrow(foo$Return))$y
计算一些东西,但似乎返回错误的密度值。
谢谢你帮我解决!
达尼
最佳答案
转念一想,忘记密度函数,我突然意识到你想要做什么。大多数密度函数返回一个网格,所以不要给你精确点的评估。如果你想要,你可以使用 sm
包:
require(sm)
foo <- data.frame(Return=rpois(100,5))
foo$density <- sm.density(foo$Return,eval.points=foo$Return)$estimate
# the plot
id <- order(foo$Return)
hist(foo$Return,freq=F)
lines(foo$Return[id],foo$density[id],col="red")
如果不同值的数量不是很大,您可以使用 ave() :
foo$counts <- ave(foo$Return,foo$Return,FUN=length)
如果目的是绘制密度函数,则无需像您一样计算它。只需使用
plot(density(foo$Return))
或者,在下方添加直方图(注意选项
freq=F
)hist(foo$Return,freq=F)
lines(density(foo$Return),col="red")
关于r - 每个返回的密度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488888/