Pergunta

Vamos dizer que eu tenho este vetor de zoológico

mine <- zoo(c(rep(0,4),rep(1,4),rep(0,5),rep(1,23),rep(0,4),rep(1,2)),as.chron(seq(1:42)))

E eu quero extrair vários elementos em algum pedido

> mine[14]
01/15/70 
       1 
> mine[5]
01/06/70 
       1 
> mine[41]
02/11/70 
       1 

Funciona!. Mas agora eu tento fazer isso de uma maneira diferente

zz <- c(14, 5, 41)
mine[zz]

01/06/70 01/15/70 02/11/70 
       1        1        1 

Não sei por que recebo em uma ordem diferente. Como posso manter o pedido que quero, a ordem da minha lista ?? Não me importo se for uma lista, um vetor, por colunas ou por linha, mas gostaria de obtê -la na ordem em que pedi.

Felicidades

Foi útil?

Solução

A resposta para por que o zoológico faz isso é que ele tem um método para a função [ ([.zoo), e cria um novo objeto de zoológico a partir dos valores subconjuntos, que ele deseja logicamente reordenar para que seja um objeto de zoológico válido.

Você pode alcançar o que deseja acessar os índices de tempo e dados por meio das funções de acessador relevante:

> index(mine)[c(14, 5, 41)]
[1] 01/15/70 01/06/70 02/11/70
> coredata(mine)[c(14, 5, 41)]
[1] 1 1 1

Se você deseja combinar isso em uma única etapa, escreva sua própria diversão para fazer:

myExtract <- function(x, want) {
    out <- coredata(mine)[want]
    names(out) <- index(x)[want]
    out
}

Que dá:

> myExtract(mine, want = c(14, 5, 41))
01/15/70 01/06/70 02/11/70 
       1        1        1
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top