Tenho uma lista que contém detalhes do tráfego da web.
No processo de retangularização das listas, gostaria de acrescentar um valor a cada vetor nas sublistas nomeadas, que é o nome real do vetor da sublista.
Se eu usar isso por exemplo:
test_list %>%
map_depth(2, \(x) append(x, names(x)))
... Acabo adicionando todos os nomes dos elementos do vetor, enquanto quero acrescentar um nome de elemento de "campaign_type" com o valor "manual_campaign" ou "google_ads_campaign", já que esses são os únicos 2 nomes para esses vetores de sublista.
Com sucesso, a primeira sublista teria estes elementos:
- campanha_id: NA
- nome_da_campanha: '(orgânico)'
- ...
- tática_de_marketing : NA
- tipo_de_campanha: "campanha_manual"
Tenho usado purrr
e a map
família para retangularização, então tanto a base R quanto a base R tidyverse
são bem-vindas.
Obrigado.
Dados Reprex:
test_list <- structure(list(list(manual_campaign = list(campaign_id = NA_character_,
campaign_name = "(organic)", source = "bing", medium = "organic",
term = "(not provided)", content = "(not set)", source_platform = NA_character_,
creative_format = NA_character_, marketing_tactic = NA_character_),
google_ads_campaign = list(NULL, NULL, NULL, NULL, NULL,
NULL)), list(manual_campaign = list(campaign_id = NA_character_,
campaign_name = "(referral)", source = "Google", medium = "My Campaign",
term = "(not set)", content = "(not set)", source_platform = NA_character_,
creative_format = NA_character_, marketing_tactic = NA_character_),
google_ads_campaign = list(customer_id = "1111", account_name = "My Account",
campaign_id = "2222", campaign_name = "My Campaign Name",
ad_group_id = "3333", ad_group_name = "My Adgroup"))))```
Aqui está outra abordagem que permite incluir os nomes da lista de nós diretamente ao desaninhar a lista em um data.frame usando a opção
how = "bind"
norrapply()
pacote fromrrapply
(extensão de baserapply()
):Uma solução poderia ser usar
map_depth
o nível 1 e chamarmapply
a função na lista aninhada para obter o que você pediu:Em seguida, vincular e colocar tudo no quadro de dados:
saída:
Espero que isso possa ajudar, mas com certeza existem outras soluções também.
{collapse}
é poderoso.unlist2d()
tem umrecursive
argumento - definido comoTRUE
(padrão).Editar. O formato amplo pode não ser necessário.
Obtendo os nomes genericamente extraindo os nomes de comprimento máximo de todas as sublistas
Atribuindo os nomes pelos nomes de nível superior manual_campaign e google_ads_campaign
Finalmente substituindo
NULL
porque isso pode causar problemas ao tentar acessar os elementos