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).↩︎