如果我在解释这个问题时得到任何错误的术语,那么我对R很新,所以道歉.
我在csv文件中有一组每日返回数据,我已设法将其转换为xts对象.数据格式如下:
HighYield..EUR. MSCI.World..EUR.
2002-01-31 0.0144 0.0031
2002-02-01 0.0056 -0.0132
2002-02-02 0.0373 0.0356
2002-02-03 -0.0167 -0.0644
2002-02-04 -0.0062 -0.0332
2002-02-05 -0.0874 -0.1112
...
Run Code Online (Sandbox Code Playgroud)
我想创建一个脚本,它将找到该月的第一个工作日(从索引中的值范围),然后创建一个新的xts对象,其中包含这些返回值.
例如,在脚本运行后,我将使用以下格式的xts对象:
HighYield..EUR. MSCI.World..EUR.
2002-01-31 0.0144 0.0031
2002-02-28 0.0011 -0.0112
2002-03-31 0.0222 0.0224
2002-04-30 -0.0333 -0.0223
2002-05-30 -0.0011 -0.0012
2002-06-30 -0.0888 -0.0967
...
Run Code Online (Sandbox Code Playgroud)
有谁可以帮助我吗?并且如果可能的话,解释脚本的每个部分正在做什么.
我想计算一组指数的滚动20天实现波动率.这是我用来下载指数价格,计算每日回报和20天实现波动率的代码.
library(quantmod)
library(PerformanceAnalytics)
tickers = c("^RUT","^STOXX50E","^HSI", "^N225", "^KS11")
myEnv <- new.env()
getSymbols(tickers, src='yahoo', from = "2003-01-01", env = myEnv)
index <- do.call(merge, c(eapply(myEnv, Ad), all=FALSE))
#Calculate daily returns for all indices and convert to arithmetic returns
index.ret <- exp(CalculateReturns(index,method="compound")) - 1
index.ret[1,] <- 0
#Calculate realized volatility
realizedvol <- rollapply(index.ret, width = 20, FUN=sd.annualized)
Run Code Online (Sandbox Code Playgroud)
一切都很快,直到最后一行.我还没有计时,但是它的分数是几分钟,而我希望它只需几秒钟.有没有更快的方法来计算实现的波动率?
谢谢.
> library(PerformanceAnalytics)
> data(managers)
> class(managers)
[1] "xts" "zoo"
> head(managers)
HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 EDHEC LS EQ SP500 TR US 10Y TR US 3m TR
1996-01-31 0.0074 NA 0.0349 0.0222 NA NA NA 0.0340 0.00380 0.00456
1996-02-29 0.0193 NA 0.0351 0.0195 NA NA NA 0.0093 -0.03532 0.00398
1996-03-31 0.0155 NA 0.0258 -0.0098 NA NA NA 0.0096 -0.01057 0.00371
1996-04-30 -0.0091 NA 0.0449 0.0236 NA NA NA 0.0147 -0.01739 0.00428
1996-05-31 0.0076 NA 0.0353 0.0028 NA NA NA …Run Code Online (Sandbox Code Playgroud) 我希望通过ID获得7天的滚动金额.假设我的数据如下所示:
data<-as.data.frame(matrix(NA,42,3))
data$V1<-seq(as.Date("2014-05-01"),as.Date("2014-09-01"),by=3)
data$V2<-rep(1:6,7)
data$V3<-rep(c(1,2),21)
colnames(data)<-c("Date","USD","ID")
Date USD ID
1 2014-05-01 1 1
2 2014-05-04 2 2
3 2014-05-07 3 1
4 2014-05-10 4 2
5 2014-05-13 5 1
6 2014-05-16 6 2
7 2014-05-19 1 1
8 2014-05-22 2 2
9 2014-05-25 3 1
10 2014-05-28 4 2
Run Code Online (Sandbox Code Playgroud)
如何添加一个新列,其中包含按ID划分的7天滚动总和?
我有两个数据表.我想做一个滚动连接但是"累积式".例如,这是两个表
d1 <- data.table(starttime = c("2011-01-01 15:29:50", "2011-01-01 15:30:03", "2011-01-01 15:40:20", "2011-01-01 15:50:20" ,"2011-01-01 16:30:00", "2011-01-01 16:40:00"),
endtime = c("2011-01-01 15:30:00", "2011-01-01 15:30:15", "2011-01-01 15:40:28", "2011-01-01 15:50:25", "2011-01-01 16:31:00", "2011-01-01 16:41:00"), v = c("A", "B", "B", "A", "B", "A"), m = c(2,3,5,8,9,9), dur = c(10,12,8,5,60,11))
starttime endtime v m dur
2011-01-01 15:29:50 2011-01-01 15:30:00 A 2 10
2011-01-01 15:30:03 2011-01-01 15:30:15 B 3 12
2011-01-01 15:40:20 2011-01-01 15:40:28 B 5 8
2011-01-01 15:50:20 2011-01-01 15:50:25 A 8 5
2011-01-01 16:30:00 …Run Code Online (Sandbox Code Playgroud) 我有以下时间序列
> y<- xts(1:10, Sys.Date()+1:10)
> y[c(1,2,5,9,10)] <- NA
> y
[,1]
2011-09-04 NA
2011-09-05 NA
2011-09-06 3
2011-09-07 4
2011-09-08 NA
2011-09-09 6
2011-09-10 7
2011-09-11 8
2011-09-12 NA
2011-09-13 NA
Run Code Online (Sandbox Code Playgroud)
一个直的na.locf给我这个:
> na.locf(y)
[,1]
2011-09-04 NA
2011-09-05 NA
2011-09-06 3
2011-09-07 4
2011-09-08 4
2011-09-09 6
2011-09-10 7
2011-09-11 8
2011-09-12 8
2011-09-13 8
Run Code Online (Sandbox Code Playgroud)
我怎么做到这一点?
[,1]
2011-09-04 NA
2011-09-05 NA
2011-09-06 3
2011-09-07 4
2011-09-08 4
2011-09-09 6
2011-09-10 7
2011-09-11 8
2011-09-12 NA
2011-09-13 NA
Run Code Online (Sandbox Code Playgroud)
我不希望最后一次观察结果除了最后一个非缺失值之外,即不会替换尾随的NA.非常感谢你的帮助!
我期望cbind.xts并do.call(cbind.xts)以相似的经过时间执行.R2.11,R2.14也是如此.
对于R2.15.2和xts 0.8-8,do.call(cbind.xts,...)变体执行速度非常慢,这有效地破坏了我以前的代码.
正如Josh Ulrich在下面的评论中指出的那样,xts软件包维护者已经意识到了这个问题.与此同时,有一个方便的工作吗?
可重复的例子:
library(xts)
secs <- function (rows, from = as.character(Sys.time()), cols = 1, by = 1)
{
deltas <- seq(from = 0, by = by, length.out = rows)
nacol <- matrix(data = NA, ncol = cols, nrow = rows)
xts(x = nacol, order.by = strptime(from, format = "%Y-%m-%d %X") +
deltas)
}
n <- 20
d1 <- secs(rows=n*100,cols=n)
d2 <- secs(rows=n*100,cols=n)
system.time(cbind.xts(d1,d2))
Run Code Online (Sandbox Code Playgroud)
与
system.time(do.call(cbind.xts, list(d1,d2)))
Run Code Online (Sandbox Code Playgroud) 我有一个数据集,里面有几个NA.我采取滚动平均值,并期望在没有NA窗口,滚动平均值应该产生一个号码,而不要NA,但是,rollmeanr在zoo似乎并没有做到这一点.例:
require(zoo)
z = zoo(cbind(a=0:10, b=c(NA,10:1), c=sample(1:11,11)), 1:11)
rollmeanr(z, k=3, fill=NA)
a b c
1 NA NA NA
2 NA NA NA
3 1 NA 3.333333
4 2 NA 4.666667
5 3 NA 4.000000
6 4 NA 6.333333
7 5 NA 7.000000
8 6 NA 9.333333
9 7 NA 8.333333
10 8 NA 8.666667
11 9 NA 5.666667
rollapply(z, width=3, FUN=mean, by=1, by.column=TRUE, fill=NA, align="right")
a b c
1 NA …Run Code Online (Sandbox Code Playgroud) 我想提取xts对象的数值.我们来看一个例子
data <- new.env()
starting.date <- as.Date("2006-01-01")
nlookback <- 20
getSymbols("UBS", env = data, src = "yahoo", from = starting.date)
Reg.curve <- rollapply(Cl(data$UBS), nlookback, mean, align="right")
Run Code Online (Sandbox Code Playgroud)
在Reg.cuve仍然是一个XTS对象,但实际上我在行走机构只关心.如何修改Reg.curve以获得数字向量?
几个月前我编写了一个将数据帧转换为xts对象的函数.它曾经工作,现在,它不再工作.我不知道如何解决它.我再次安装了xts包,但没有用.我搜索了stackoverflow并用Google搜索了它.我将不胜感激任何帮助.
谢谢!
这是我得到的错误:
Error in .Call("dimnames_zoo", x) :
"dimnames_zoo" not resolved from current namespace (xts)
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
MakeXts<-function(data){
library(xts)
data$Date<-strptime(paste(data$Date,data$Time),"%m/%d/%Y %H:%M:%S")
data<-data[,-2]
data.xts<-xts(data[,-1],order.by=as.POSIXct(data[,1]))
return (data.xts)
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
myData.xts <- MakeXts(myData)
Run Code Online (Sandbox Code Playgroud)
和数据:
myData <- structure(list(Date = c("02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015"), Time = c("16:00:00", "16:00:12",
"16:00:46", "16:00:49", "16:01:18", "16:01:25", "16:02:00", "16:02:00",
"16:02:00", "16:02:06", "16:03:02", "16:03:02", "16:03:02", "16:03:02", …Run Code Online (Sandbox Code Playgroud)