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()
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 |
16. obrigado ao Sudete pela sugestão no Discourse (https://discourse.julialang.org/t/pull-dataframes-columns-to-the-front/60327/4).↩︎