Oi Pessoal,
Estou com uma dúvida que parece ser simples.
Tenho uma lista cujos objetos têm elementos distinto, mas todos eles possuem um elemento Timestamp, com o mesmo nome = “Timestamp”.
Estou querendo converter via map todos os objetos desta lista em xts e para isso usar para cada objeto da lista o seu Timestamp para a ordenação. E é ai que estou com dúvida: como alimentar de forma iterativa a função as.xts com o elemento de “Timestamp” de cada objeto da lista.
tbl_A$Timestamp
[1] "2020-09-26 12:14:03 UTC" "2020-09-26 12:14:51 UTC" "2020-09-26 12:25:48.........
tbl_B$Timestamp
[1] "2020-09-26 14:02:48 UTC" "2020-09-26 14:08:54 UTC" "2020-09-26 14:13:45 UTC" "2020-09-26 14:17:51 UTC" "2020-09-26 14:28:45 UTC"
tbl_C$Timestamp
[1] "2020-09-30 12:45:04 UTC" "2020-09-30 12:47:49 UTC" "2020-09-30 12:51:10 UTC" "2020-09-30 12:58:52 UTC" "2020-09-30 13:09:46 UTC"
my_list <- list(tbl_A,tbl_B, tbl_C)
O que pensei:
my_list_xts <- map(my_list,~xts(.x),order.by=my_list[[.]]$Timestamp)
Error in xts(.x) : order.by requires an appropriate time-based object
map(my_list,~xts(.x),order.by=.x$Timestamp)
Error in xts(.x) : order.by requires an appropriate time-based object
map(my_list,~xts(.x),order.by="Timestamp")
Error in xts(.x) : order.by requires an appropriate time-based object
Conseguem me ajudar?
Obrigado,
Fábio
Athos
Outubro 4, 2020, 7:20pm
2
Opa, Fabio! Não testei, mas acho que seria assim:
map(my_list, xts, order.by="Timestamp")
equivalentemente,
map(my_list, ~xts(.x, order.by="Timestamp"))
Vale comparar as duas soluções! Quando se opta por usar o ~foo(.x)
em vez do foo
, os demais parâmetros tem que ser passados diretamente pra função.
Oi Athos!!
Obrigado pela resposta.
Desculpe, eu tb não ajudei colocando o código para teste, segue:
TimestampA <- seq(as.Date("2020-09-06"), length =5, by = "days")
TimestampB <- seq(as.Date("2020-01-06"), length =15, by = "days")
TimestampC <- seq(as.Date("2020-01-06"), length =10, by = "days")
dataA <- rnorm(5)
dataB <- rnorm(15)
dataC <- rnorm(10)
tbl_A <- data.frame(Timestamp = as.POSIXct(TimestampA),dataA)
tbl_B <- data.frame(Timestamp = as.POSIXct(TimestampB),dataB)
tbl_C <- data.frame(Timestamp = as.POSIXct(TimestampC),dataC)
my_list <- list(tbl_A,tbl_B,tbl_C)
Rodando os comandos sugeridos:
map(my_list,~xts(.x),order.by=.x$Timestamp)
map(my_list,~xts(.x),order.by="Timestamp")
Ainda estou obtendo erro:
Texto pré-formatado
Error in xts(.x) : order.by requires an appropriate time-based object
Com o loop abaixo estou conseguindo:
for (i in 1:length(my_list)) {
my_list[[i]] <- as.xts(my_list[[i]],order.by=my_list[[i]]$Timestamp)
}
Alguma outra dica para conseguir com o map()?
Abraço,
Fábio
assim, consegui:
my_list <- map(my_list, ~.x %>% as.xts(order.by=.x$Timestamp))
1 curtida