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…
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'
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.