2013-08-27 73 views
2

我正在從Google檢索一分鐘的引號。處理完數據後,我嘗試用一​​分鐘的時間間隔創建一個xts對象,但重複了幾次相同的日期時間,但不明白爲什麼。請注意,如果我使用相同的數據構建稱爲my.dat2的時間戳記向量,它確實有效。以R分鐘間隔創建xts對象時的意外日期格式

library(xts) 
url <- 'https://www.google.com/finance/getprices?q=IBM&i=60&p=15d&f=d,o,h,l,c,v' 
x <- read.table(url,stringsAsFactors = F) 
mynam <- unlist(strsplit(unlist(strsplit(x[5,], split='=', fixed=TRUE))[2] , split=',')) 
interv <- as.numeric(unlist(strsplit(x[4,], split='=', fixed=TRUE))[2]) 

x2 <- do.call(rbind,strsplit(x[-(1:7),1],split=',')) 
rownames(x2) <- NULL 
colnames(x2) <- mynam 

ind <- which(nchar(x2[,1])>5) 
x2[ind,1] <- unlist(strsplit(x2[ind,1], split='a', fixed=TRUE))[2] 
#To convert from data.frame to numeric 
class(x2) <- 'numeric' 

my.dat <- rep(0,nrow(x2)) 
#Convert all to same format 
for (i in 1:nrow(x2)) { 
    if (nchar(x2[i,1])>5) { 
    ini.dat <- x2[i,1] 
    my.dat[i] <- ini.dat 
    } else { 
    my.dat[i] <- ini.dat+interv*x2[i,1] 
    } 
} 

df <- xts(x2[,-1],as.POSIXlt(my.dat, origin = '1970-01-01')) 
head(df,20) 

my.dat2 <- as.POSIXlt(my.dat, origin = '1970-01-01') 
head(my.dat2,20) 

我試過一個簡單的例子模擬數據和創建日期一分創造了XTS對象的序列和它的工作所以它必須是傳遞日期的XTS功能時,我失去了一些東西。

回答

1

my.dat您的my.dat對象具有重複的值,並且xt和zoo對象必須被排序,因此所有重複的值被組合在一起。

問題是這條線,你只需要第二個元素,而不是每個非空白元素。

x2[ind,1] <- unlist(strsplit(x2[ind,1], split='a', fixed=TRUE))[2] 
# this should be 
x2[ind,1] <- sapply(strsplit(x2[ind,1], split='a', fixed=TRUE), "[[", 2) 
相關問題