Let’s revisit our example all_grades()
data defined in Chapter 4:
df = all_grades()
name | grade |
---|---|
Sally | 1.0 |
Bob | 5.0 |
Alice | 8.5 |
Hank | 4.0 |
Bob | 9.5 |
Sally | 9.5 |
Hank | 6.0 |
The DataFramesMeta.jl
@select
macro is similar to the select
DataFrames.jl
function. It performs column selection:
@select df :name
name |
---|
Sally |
Bob |
Alice |
Hank |
Bob |
Sally |
Hank |
We can add as many columns as we want to @select
:
@select df :name :grade
name | grade |
---|---|
Sally | 1.0 |
Bob | 5.0 |
Alice | 8.5 |
Hank | 4.0 |
Bob | 9.5 |
Sally | 9.5 |
Hank | 6.0 |
To use the column selectors (Section 4.4), you need to wrap them inside $()
:
@select df $(Not(:grade))
name |
---|
Sally |
Bob |
Alice |
Hank |
Bob |
Sally |
Hank |
The DataFramesMeta.jl
syntax, for some users, is easier and more intuitive than the DataFrames.jl
’s minilanguage source => transformation => target
. The minilanguage is replaced by target = transformation(source)
.
Suppose that you want to represent the grades as a number between 0 and 100:
@select df :grade_100 = :grade .* 10
grade_100 |
---|
10.0 |
50.0 |
85.0 |
40.0 |
95.0 |
95.0 |
60.0 |
Of course, the .*
can be omitted by using the vectorized form of the macro, @rselect
:
@rselect df :grade_100 = :grade * 10
grade_100 |
---|
10.0 |
50.0 |
85.0 |
40.0 |
95.0 |
95.0 |
60.0 |