Iteração com Objetos de Listas

Oi pessoal, boa noite…
Tenho um df com 2.373 linhas e 2 variáveis… uma das váriaveis é uma ID e a outra é uma lista de listas…

Teria alguma maneira de eu conseguir criar vários data.frames com a iteração df_i, no qual o i seria a ID contendo apenas uma das listas de dentro da minha lista de listas?

Acho que a pergunta ficou confusa, mas no caso seria tipo isso…

df_1<-dados$variavel2[[1]]$lista
df_2<-dados$variavel2[[2]]$lista
.
.
.

Eu pensei em utilizar um for, ou um purr::map, mas não consegui avançar muito… :frowning:

EDIT:
Consegui avançar um pouco com o for, mas ele só tá colando um texto em cada data frame que estou querendo criar…

> for(i in dados$ID){
>   nomes = paste("bd_",i)
>   posicoes = paste0("dados$variavel2[[",i,"]]$lista")
>   assign(nomes, posicoes)
> }

Olá Ozias,

existem outras formas de fazer, mas seguindo a sua linha de raciocínio já iniciada, foi quase lá.
Na linha que você atribui as posições, você não precisa usar o comando paste0, basta você chamar o banco de dados filtrando o elemento " i ", que a cada iteração vai assumir um valor.

Então ficaria assim:

posicoes = dados[dados$variavel2 == i, ]$lista

Espero ter ajudado!

1 curtida

Oi @eleuterio.larissa, tudo bem? Desde já te agradeço pela ajuda, mas tentei aplicar naquele for, mas não deu… ele me retornou o seguinte erro:

> for(i in dados$ID){
>      nomes = paste("bd_",i)
>      posicoes = dados[dados$variavel2 == i, ]$lista
>      assign(nomes, posicoes)
>      } 
>   Error in `[.tbl_df`(dados, dados$variavel2 == i, ) : 
>        'list' object cannot be coerced to type 'integer'

:frowning:

Bom, pelo que eu entendi pelo erro sua variável 2 é a lista, certo?

Como o i assume valores de id você precisa usar a coluna id para filtrar (não tinha me atentado a isso na primeira resposta, pois meu objetivo era alterar o menos possível o seu código e eu tinha entendido que a variavel2 também tinha o id)

Antes de reformular a linha de posicoes, vamos ver se eu entendi seu banco de dados:

  • O dataframe dados tem uma coluna de id e uma coluna com listas
  • Para cada id você quer extrair o elemento lista da coluna variável

Se sim, o código ficaria:

posicoes = dados[dados$ID == i,]$variavel2$lista

O erro que você colocou aqui reclama que você está comparando um elemento com uma lista e de fato, isso foi feito: dados$variavel2 é uma lista e o i é um elemento da coluna ID. O código anterior compara se dados$variavel2 (lista) == i (ID). E isso não funciona para filtrar os dados, como queríamos.

Veja se dessa forma funciona.