假设我有一个持续几个时期的变量.就像我有一个Ipod的年数.所以我从2001年到2004年都有Ipod第一代,然后在2005年我得到了Ipod 2等等.所以我的数据框看起来像:
2001 Ipod1
2002 Ipod1
2003 Ipod1
2004 Ipod1
2005 Ipod2
2006 Ipod2
2007 Ipod2
2008 Ipod2
2009 Ipod3
2010 Ipod3
Run Code Online (Sandbox Code Playgroud)
我想要的是在新变量到来的时候创建一个假人,所以我会得到:
Year Var Dummy
2001 Ipod1 1
2002 Ipod1 0
2003 Ipod1 0
2004 Ipod1 0
2005 Ipod2 1
2006 Ipod2 0
2007 Ipod2 0
2008 Ipod2 0
2009 Ipod3 1
2010 Ipod3 0
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够做到这一点:
df = structure(list(Year = 2001:2010, Var = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L), .Label = c("Ipod1", "Ipod2", "Ipod3"
), …Run Code Online (Sandbox Code Playgroud) 我正在模拟GARCH模型.模型本身并不太相关,我想问你的是如何在R中优化模拟.如果你看到任何矢量化的空间,我已经考虑过但我看不到它.到目前为止我所拥有的是:
让:
# ht=cond.variance in t
# zt= random number
# et = error term
# ret= return
# Horizon= n periods ahead
Run Code Online (Sandbox Code Playgroud)
所以这是代码:
randhelp= function(horizon=horizon){
ret <- zt <- et <- rep(NA,horizon)#initialize ret and zt et
for( j in 1:horizon){
zt[j]= rnorm(1,0,1)
et[j] = zt[j]*sqrt(ht[j])
ret[j]=mu + et[j]
ht[j+1]= omega+ alpha1*et[j]^2 + beta1*ht[j]
}
return(sum(ret))
}
Run Code Online (Sandbox Code Playgroud)
我想从现在开始模拟5个周期的回报,所以我将运行这个让我们说10000.
#initial values of the simulation
ndraws=10000
horizon=5 #5 periods ahead
ht=rep(NA,horizon) #initialize ht
ht[1] = 0.0002
alpha1=0.027
beta1 =0.963
mu=0.001
omega=0
sumret=sapply(1:ndraws,function(x) …Run Code Online (Sandbox Code Playgroud) 假设我们有以下数据库:
ID Shoot hit
1 10 2
1 9 3
1 8 1
2 10 8
2 8 8
2 11 10
2 7 2
3 9 2
4 6 6
4 6 5
.
.
Run Code Online (Sandbox Code Playgroud)
我希望在每个组中分配数字,在这种情况下每个ID如下:
ID Shoot hit number.in.group
1 10 2 1
1 9 3 2
1 8 1 3
2 10 8 1
2 8 8 2
2 11 10 3
2 7 2 4
3 9 2 1
4 6 6 1
4 6 5 …Run Code Online (Sandbox Code Playgroud) 我想从Tsay的金融时间系列书中复制一张表,并意识到尽管我能够做到这一点,但我的代码看起来很笨拙并且填补了不良做法.我尝试了一下plyr,但对我来说并没有真正起作用.
所以这是我的代码:
library(fBasics)
url= 'http://faculty.chicagobooth.edu/ruey.tsay/teaching/fts3/d-ibm3dx7008.txt'
table1.2 = read.table(url,header=T)
l1=lapply(table1.2,basicStats)
naml1 = names(l1)
datmat = as.data.frame(matrix(0,nrow=nrow(l1$Date),ncol=4))
nams = names(l1)
j=1
for( i in nams){
datmat[,j] = eval(parse(text=paste("l1",i,sep="$")))
j=j+1
}
rownames(datmat)= rownames(l1[[1]])
colnames(datmat)=colnames(table1.2)
Run Code Online (Sandbox Code Playgroud)
我不关心Date的摘要统计,所以就这样摆脱它.
datmat =datmat[,-1]
Run Code Online (Sandbox Code Playgroud)
所以我听说eval(解析(text =应该尽可能避免.我尝试使用函数get但是没有工作.
我只是想开始摆脱糟糕的编程习惯,所以任何建议都非常受欢迎.