我试图在R中计算一组数据(我的x变量的每一列)和另一个(y变量)之间的滚动协方差.我想我可以使用其中一个应用函数,但是找不到如何滚动两个同时设置输入.这是我尝试过的:
set.seed(1)
x<-matrix(rnorm(500),nrow=100,ncol=5)
y<-rnorm(100)
rollapply(x,width=5,FUN= function(x) {cov(x,y)})
z<-cbind(x,y)
rollapply(z,width=5, FUN=function(x){cov(z,z[,6])})
Run Code Online (Sandbox Code Playgroud)
但没有人做我想做的事.我找到的一个解决方案是使用for循环,但想知道我是否可以在R中更高效:
dResult<-matrix(nrow=96,ncol=5)
for(iLine in 1:96){
for(iCol in 1:5){
dResult[iLine,iCol]=cov(x[iLine:(iLine+4),iCol],y[iLine:(iLine+4)])
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我预期的结果:
head(dResult)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.32056460 0.05281386 -1.13283586 -0.01741274 -0.01464430
[2,] -0.03246014 0.78631603 -0.34309778 0.29919297 -0.22243572
[3,] -0.16239479 0.56372428 -0.27476604 0.39007645 0.05461355
[4,] -0.56764687 0.09847672 0.11204244 0.78044096 -0.01980684
[5,] -0.43081539 0.01904417 0.01282632 0.35550327 0.31062580
[6,] -0.28890607 0.03967327 0.58307743 0.15055881 0.60704533
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 python 中创建一个日期数据框。我使用日期作为索引:
aDates.head(5)
Out[114]:
0 2009-12-31
1 2010-01-01
2 2010-01-04
3 2010-01-05
4 2010-01-06
Name: Date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
然后我创建一个空的数据框:
dfAll_dates = pd.DataFrame(index = aDates)
Run Code Online (Sandbox Code Playgroud)
然后我得到了一个函数,它创建了一个我试图添加为列的 Pandas 系列日期,但为了您可以轻松重现,假设我们添加了用于索引的相同系列:
dfAll_dates['my_added_column'] = aDates
Run Code Online (Sandbox Code Playgroud)
但这导致:
dfAll_dates.head(5)
Out[120]:
my_added_column
Date
2009-12-31 NaT
2010-01-01 NaT
2010-01-04 NaT
2010-01-05 NaT
2010-01-06 NaT
Run Code Online (Sandbox Code Playgroud)
我试图在 aDates 上使用 .totimestamp 将我的日期转换为时间戳,但这并没有解决问题(然后我有一个“绑定方法 Series.to_timestamp 为 0”),并且因为定义中没有类型我看不到为什么我无论如何都必须转换。
你能帮忙吗?
我试图在给定数据帧的所有行(dfTest,其中包含向量x的值)上应用基本样条函数,以获得更大的一个(dfBigger),它将包含向量xnew(包含x)的所有值.
因此,我定义了以下变量:
import pandas as pd
import numpy as np
x = [0,1,3,5]
xnew = range(0,6)
np.random.seed(123)
dfTest = pd.DataFrame(np.random.rand(12).reshape(3,4))
Run Code Online (Sandbox Code Playgroud)
和基本样条函数:
def spline(y, x , xnew):
from scipy import interpolate
model = interpolate.splrep(x,y, s=0.)
ynew = interpolate.splev(xnew,model)
result = ynew.round(3)
return result
Run Code Online (Sandbox Code Playgroud)
这似乎工作:
spline(dfTest.iloc[0],x,xnew)
Out[176]: array([ 0.696, 0.286, 0.161, 0.227, 0.388, 0.551])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下方法在所有行上应用它时:
dfBigger = dfTest.apply(lambda row : spline(row, x, xnew), axis = 1)
Run Code Online (Sandbox Code Playgroud)
我懂了 :
ValueError: Shape of passed values is (3, 6), indices imply (3, 4)
Run Code Online (Sandbox Code Playgroud)
由于dfBigger大小没有在任何地方定义,我看不出有什么问题.任何有关此代码的帮助和/或评论将不胜感激.