Фильтрация строк в индексируемом объекте данных в R - PullRequest
0 голосов
/ 19 января 2012

Я новичок в R. У меня есть индексированные данные, которые мне нужно отфильтровать, чтобы я мог получить каждую X-ю точку данных.Как мне это сделать?Код, использованный для создания данных, был:

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" ...

1 Ответ

0 голосов
/ 19 января 2012

Было бы полезно, если бы вы сказали нам, каков ваш объект.Вектор?Список?

Если это вектор с именем 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, ...

ОБНОВЛЕНИЕ

Поскольку ваш объект двумерный, попробуйте:

n   <- 5 # get every 5th object
idx <- seq(1,nrow(mat),by=n)
mat[idx,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...