2012-01-19 34 views
0

我是R新手。我有一个数据索引的onject,需要过滤以便我可以获取每个第X个数据点。我如何去做这件事?用于创建数据 代码为:筛选R中的数据索引对象中的行

temp <- blpGetData(conn, securities[1], fields=values,start=startdate,end=enddate, barsize=interval, barfields=tick,retval=datatype) 
assign(paste(gsub(" +","",repl[1])),temp) 
name <- paste("merge(",paste(gsub(" +","",repl[1]))) 
suf <- paste(", suffixes=c('.",paste(gsub(" +","",repl[1])),"'",sep="") 

for(i in 2:length(securities)){ 
    temp <- blpGetData(conn, securities[i], 
         fields=values, 
         start=startdate, 
         end=enddate, 
         barsize=interval, 
         barfields=tick, 
         retval=datatype) 
    assign(paste(gsub(" +","",repl[i])),temp) 
    name <- paste(name,",",paste(gsub(" +","",repl[i]))) 
    suf <- paste(suf,",'.",paste(gsub(" +","",repl[i])),"'",sep="") 
} 
name <- paste(name,suf,"))") 
mat <- eval(parse(text=name)) 

我希望每一个X行。 mat是对象。

> cat(name) 
PX_OPEN..CINC1 PX_HIGH..CINC1 PX_LOW..CINC1 PX_LAST..CINC1 PX_OPEN..CINC5 PX_HIGH..CINC5 PX_LOW..CINC5 PX_LAST..CINC5 PX_OPEN..UST10Y PX_HIGH..UST10Y PX_LOW..UST10Y PX_LAST..UST10Y 

> str(mat) ‘zoo’ series from 2011-11-11 to 2012-01-18 
Data: num [1:49, 1:12] 206 205 205 212 219 ... 
- attr(*, "dimnames")=List of 2 
..$ : NULL 
..$ : chr [1:12] "PX_OPEN..CINC1" "PX_HIGH..CINC1" "PX_LOW..CINC1" "PX_LAST..CINC1" 
... Index: Date[1:49], format: "2011-11-11" "2011-11-14" "2011-11-15" "2011-11-16" "2011-11-17" "2011-11-18" ... 
+0

你可以做'猫(名称)'和'STR(垫)'请吗? - 只是有助于弄清楚发生了什么。干杯! – 2012-01-19 01:58:27

+0

cat(name) PX_OPEN..CINC1 PX_HIGH..CINC1 PX_LOW..CINC1 PX_LAST..CINC1 PX_OPEN..CINC5 PX_HIGH..CINC5 PX_LOW..CINC5 PX_LAST..CINC5 PX_OPEN..UST10Y PX_HIGH..UST10Y PX_LOW..UST10Y PX_LAST..UST10Y> > str(mat) 'zoo'series from 2011-11-11 to 2012-01-18 Data:num [1:49,1:12] 206 205 205 212 219 ... - attr(*,“dimnames”)=列表2 .. $:NULL .. $:chr [1:12]“PX_OPEN..CINC1”“PX_HIGH..CINC1”“PX_LOW..CINC1”“PX_LAST ..CINC1“... 指数:日期[1:49],格式:”2011-11-11“”2011-11-14“”2011-11-15“”2011-11-16“”“2011- 11-17“”2011-11-18“... – 2012-01-19 02:36:44

回答

0

如果您告诉我们您的物体是什么,这将有所帮助。矢量?一个列表?

如果它是一个名为myvector载体,你希望每个x个数据点从第一你可以用seq(...)生成序列1, 1+x, 1+2*x, 1+3*x, ...索引到你的对象开始。请参阅?seq

如:

myvector <- runif(100) # generate vector of 100 random values 
idx  <- seq(1,length(myvector),by=10) # get every 10th value starting from 
              # & including 1, 
myvector[idx] # every 10th value: elements 1, 11, 21, ... 

UPDATE

因为你的对象是二维的,请尝试:

n <- 5 # get every 5th object 
idx <- seq(1,nrow(mat),by=n) 
mat[idx,] 
+0

[.zoo'(data,idx)中的错误:下标越界它按日期进行索引,更像是一个矩阵。 > dim(data)给出[1] 49 12 – 2012-01-19 01:22:18

+0

在我可以帮助你之前,你必须再次告诉我你的对象是什么。请编辑你的问题,说明你如何创建你的对象或它来自哪个包。另外,如果是“矩阵”,那么“每个X数据点”是什么意思? “每第X行”? “每第X列”? – 2012-01-19 01:24:20

+0

编辑了代码。如果相关的话,该对象的类是动物园。再次,道歉,因为我是新的,必须编辑别人的代码。 – 2012-01-19 01:42:09