Students learn about table methods, which allow them to order, filter, and build columns to extend the animals table.

Lesson Goals

Students will be able to…​

  • order the Animals Dataset by a number of criteria

  • filter the Animals Dataset by species, fixed status, and age

  • add a column to the Animals Dataset

Student-facing Lesson Goals

  • Let’s learn how transform one table into another.



a type of data with two values: true and false


a ratio showing the parts per hundred

🔗Functions that Work on Rows 20 minutes


Students review row definitions, and get more practice reading the definitions of functions that work on rows.


Load the Table Methods Starter File, go to the File menu, and click "Save a Copy".

Explain to students that this activity is about reading carefully and getting more comfortable with functions that work on rows.


With your partner, complete items 1 through 8 on Reading Row and Function Definitions.

Direct students to take a look at the three examples for is-dog. Each one shows us a different way of thinking about examples, in this case using a row that should return false:

  is-dog(cat-row) is false
  is-dog(cat-row) is "cat" == "dog"
  is-dog(cat-row) is cat-row["species"] == "dog"
  1. The first example just tells us the answer we think we’ll get back. cat-row is NOT a dog, so we expect false!

  2. The second example shows us some of the work involved: we know the species of the row is "cat", and comparing that to the String "dog" will return false.

  3. The third example shows all the work: given the cat-row, we lookup the value in the "species" column and compare it to the String "dog".

  • Add three true examples for is-dog, this time using the dog-row you defined above.

  • Complete the worksheet.


  • Who can explain what is-old does?

    • It looks up the age of the row, and asks if its greater than 10.

  • Who can explain what lookup-name does?

    • It looks up the value in the name column.

  • Who can explain what lookup-fixed does?

    • It looks up the value in the fixed column.

  • Who can explain what label does?

    • It prints the animal’s name in red.

  • Who can explain what kilos does?

    • It divides the pounds by 2.2.

Challenge students to use terminology like "looks up the value in the X column" when describing a lookup.

🔗Ordering, Filtering, and Building 30 minutes


Students learn to sort rows of a table in ascending or descending order, filter the rows using a Boolean-producing function, and build a new column.


Select 6-8 students, each of whom will represent a unique Row of a dataset called “Students.” Arrange them in a line at the front of the room.

Explain to students that: * Each of you represents a Row in a table of students * Standing together, you represent a sample of the class, stored in a table. * Like you, each student has columns like "First Name", "Last Name", "Birthday", "Favorite Food", etc.

A Table is a collection of Rows. And we can do things to collections! One thing we can do is order the rows by some criteria. What are some ways to sort a table of students?

Tell the class that you are going to select a volunteer who will play the role of… order-by! Announce to your volunteer "Sort the Rows by height, from smallest to largest!", and have them do it. Then announce to your volunteer "Sort the Rows by height, from largest to smallest!", and have them do it.

Solicit other ideas, like sorting by birthday. Try sorting in ascending and descending order, using language appropriate cues: "order-by 'birthday', ascending equals true", or "order-by height, ascending equals false!" After a few iterations, give the volunteer a round of applause!

Another thing we can do is filter the rows by some criteria. In our animals dataset, for example, we might want to filter the table to show only the rows for dogs, or only the rows for cats older than 5. What are some ways to filter our table of students?

Tell the class that you are going to select a volunteer who will play the role of… filter! Hand the volunteer a function card from the Function Cards set. (You may need to choose your students strategically. The demonstration that follows, for instance, requires at least one student who wears glasses.) Instruct Filter to read the card carefully, making sure they understand what it will do for each "Row" (student!) in the "Table" (line of students), but to keep that information a secret from the other students.

Explain to the class that the volunteer playing Filter will walk from one student to the next, referring to the function (on the card) in order to determine if each student should step forward or step backward.

Here’s how that might look if Filter chose a function card has-glasses.

  • Filter stands in front of Student 1 and checks if they are wearing glasses.

  • Filter to Student 1 (who wears glasses): Step forward. (Student 1 steps forward.)

  • Filter stands in front of Student 2 and checks if they are wearing glasses.

  • Filter to Student 2 (who does not wear glasses): Step back. (Student 2 steps back.)

Have your Filter volunteer go through all their peers, applying their card to each one. Based on who stepped forward and backward, what was on the card? Repeat for several cards.


Pyret Tables have their own methods for sorting, filtering, and more. The exploration that students will complete is divided into three sections, accordingly.

Complete the "Ordering Rows" section on Exploring Methods to discover how the .order-by method works.

After students have completed the section, lead a discussion to confirm that students understand the following key ideas:

  • .order-by consumes a String (the name of the column by which to sort) and a Boolean (true for ascending, false for descending), and sorts the rows according to that column.

  • The .order-by method produces a new table rather than changing the existing one.

  • How could we test that a new table was produced? We could sort the table, then evaluate animals-table and see if it stayed sorted.

  • Complete the "Filtering Rows" section on Exploring Methods

  • Find the contract for .filter in your Contracts page.

Confirm that students understand the following key ideas:

  • The Domain of .filter is a Boolean-producing function

  • The .filter method works by producing a new table containing only rows for which the function returns true.

  • The .filter method creates a new table.

Complete "Building Columns", the last section of Exploring Methods

Confirm that students understand the following:

  • .build-column takes in a String and a function

  • The .build-column method produces a new table with an extra column, using the String for the column title, and fills in the values by applying the function to every Row.

  • Building a column in the animals-table produces a new table.

Common Misconceptions

Students often think that these methods change the table! In Pyret, all table methods produce a brand new table. If we want to save that table, we need to define it. For example: cats = animals-table.filter(is-cat).


Being able to define functions and use them with Table Methods is a huge upgrade in our ability to analyze data!

  • Suppose we wanted to determine whether cats or dogs get adopted faster. How might using the .filter method help?

  • If the shelter is purchasing food for older cats, what filter would we write to determine how many cats to buy for?

  • A dataset from Europe might list everything in metric (centimeters, kilograms, etc), so we could build a column to convert that to imperial units (inches, pounds, etc).

  • A dataset about schools might include columns for how many students are in the school and how many of those students identify as multi-racial. But when comparing schools of different sizes, what we really want is a column showing what percentage of students identify as multi-racial. We could use .build-column to compute that for every row in the table.

  • What are some ways you might want to filter your dataset?

  • What are some columns you might want to build for your dataset?

These materials were developed partly through support of the National Science Foundation, (awards 1042210, 1535276, 1648684, and 1738598). CCbadge Bootstrap by the Bootstrap Community is licensed under a Creative Commons 4.0 Unported License. This license does not grant permission to run training or professional development. Offering training or professional development with materials substantially derived from Bootstrap must be approved in writing by a Bootstrap Director. Permissions beyond the scope of this license, such as to run training, may be available by contacting