4.4 Select

Enquanto filter remove linhas, select remove colunas. Entretanto, select é muito mais versátil do que apenas remover colunas, como discutiremos nesta seção. Primeiro, vamos criar um dataset com múltiplas colunas:

function responses()
    id = [1, 2]
    q1 = [28, 61]
    q2 = [:us, :fr]
    q3 = ["F", "B"]
    q4 = ["B", "C"]
    q5 = ["A", "E"]
    DataFrame(; id, q1, q2, q3, q4, q5)
end
responses()
Table 7: Responses.
id q1 q2 q3 q4 q5
1 28 us F B A
2 61 fr B C E

Aqui, os dados representam respostas para cinco perguntas (q1, q2, …, q5) em um determinado questionário. Começaremos “selecionando” algumas colunas deste dataset. Como de costume, usamos símbolos para especificar colunas:

select(responses(), :id, :q1)
id q1
1 28
2 61

Também podemos usar strings se quisermos:

select(responses(), "id", "q1", "q2")
id q1 q2
1 28 us
2 61 fr

Para selecionar tudo menos uma ou mais colunas, use Not com a coluna que não se deseja selecionar:

select(responses(), Not(:q5))
id q1 q2 q3 q4
1 28 us F B
2 61 fr B C

Ou, com múltiplas colunas:

select(responses(), Not([:q4, :q5]))
id q1 q2 q3
1 28 us F
2 61 fr B

É possível também misturar e combinar colunas que queremos preservar com colunas que não (ou Not) queremos selecionar:

select(responses(), :q5, Not(:id))
q5 q1 q2 q3 q4
A 28 us F B
E 61 fr B C

Perceba como q5 agora é a primeira coluna no DataFrame retornado por select. Existe uma maneira mais inteligente de conseguir o mesmo usando :. O caractere de dois pontos : pode ser pensado como “todas as colunas que ainda não incluímos.” Por exemplo:

select(responses(), :q5, :)
q5 id q1 q2 q3 q4
A 1 28 us F B
E 2 61 fr B C

Ou, para colocar q5 na segunda posição16:

select(responses(), 1, :q5, :)
id q5 q1 q2 q3 q4
1 A 28 us F B
2 E 61 fr B C

OBSERVAÇÃO: Como você deve ter observado, existem várias maneiras de selecionar uma coluna. Elas são conhecidas como seletores de coluna.

Podemos usar:

  • Symbol: select(df, :col)

  • String: select(df, "col")

  • Integer: select(df, 1)

Até mesmo renomear colunas é possível via select usando a sintaxe de par origem => destino:

select(responses(), 1 => "participant", :q1 => "age", :q2 => "nationality")
participant age nationality
1 28 us
2 61 fr

Além disso, graças ao operador “splat” ... (see Section 3.2.10), também podemos escrever:

renames = (1 => "participant", :q1 => "age", :q2 => "nationality")
select(responses(), renames...)
participant age nationality
1 28 us
2 61 fr

  1. 16. obrigado ao Sudete pela sugestão no Discourse (https://discourse.julialang.org/t/pull-dataframes-columns-to-the-front/60327/4).↩︎



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso