📖 Scenario: You work as a data analyst. You have a small table of sales data, but some values are missing. You want to clean the data by removing rows with missing values and then fill missing values in another column.
🎯 Goal: Build an R script that creates a data frame with missing values, removes rows with missing values in one column, fills missing values in another column, and prints the cleaned data.
📋 What You'll Learn
Create a data frame called sales with columns product, price, and quantity including some missing values
Create a variable called cleaned_sales that removes rows with missing price using drop_na()
Fill missing quantity values in cleaned_sales using fill() from the tidyr package
Print the final cleaned_sales data frame
💡 Why This Matters
🌍 Real World
Data cleaning is a common task in data analysis to prepare data for accurate insights.
💼 Career
Knowing how to handle missing data is essential for data analysts, scientists, and anyone working with real-world data.
Progress0 / 4 steps
1
Create the sales data frame with missing values
Create a data frame called sales with these exact columns and values: product as c("A", "B", "C", "D"), price as c(10, NA, 15, 20), and quantity as c(5, 3, NA, 8).
R Programming
Hint
Use data.frame() to create the table. Use NA for missing values.
2
Remove rows with missing price values
Load the tidyr package and create a new variable called cleaned_sales by removing rows with missing price from sales using drop_na(price).
R Programming
Hint
Use library(tidyr) to load the package. Use drop_na() with the price column.
3
Fill missing quantity values
Use fill() from the tidyr package on cleaned_sales to fill missing quantity values downward. Update cleaned_sales with the result.
R Programming
Hint
Use fill(cleaned_sales, quantity) to fill missing values downward.
4
Print the cleaned sales data frame
Write a line to print the cleaned_sales data frame to show the final cleaned data.
R Programming
Hint
Use print(cleaned_sales) to display the data frame.
Practice
(1/5)
1. What does the drop_na() function do in R's tidyr package?
easy
A. Fills missing values with the mean of the column.
B. Replaces missing values with zeros.
C. Removes rows that contain missing values in specified columns.
D. Sorts the data frame by missing values.
Solution
Step 1: Understand the purpose of drop_na()
The function is designed to remove rows that have missing (NA) values in specified columns or in the entire data frame if no columns are specified.
Step 2: Compare with other options
Options A and C describe filling missing values, which is done by fill() or other functions, not drop_na(). Sorts the data frame by missing values. sorts the data frame by missing values, which is unrelated.
Final Answer:
Removes rows that contain missing values in specified columns. -> Option C
Quick Check:
drop_na() removes rows with NA [OK]
Hint: Remember: drop_na drops rows with NA, fill replaces NA [OK]
Common Mistakes:
Confusing drop_na() with fill()
Thinking drop_na() fills missing values
Assuming drop_na() sorts data
2. Which of the following is the correct syntax to fill missing values in a data frame df using the fill() function from tidyr for the column score?
easy
A. df.fill(score, direction = "down")
B. fill(df, score, direction = "down")
C. fill(score, df, .direction = "down")
D. df %>% fill(score, .direction = "down")
Solution
Step 1: Recall the pipe operator usage
The fill() function is typically used with the pipe operator %>% to pass the data frame as the first argument.
Step 2: Check the argument order and syntax
df %>% fill(score, .direction = "down") correctly uses df %>% fill(score, .direction = "down"). Options B and C have wrong syntax or argument order. df.fill(score, direction = "down") uses incorrect syntax not valid in R.
Final Answer:
df %>% fill(score, .direction = "down") -> Option D
Quick Check:
Use pipe %>% before fill() with column name [OK]
Hint: Use pipe %>% before fill() and specify column [OK]
This removes rows where column x has NA values. Row 2 has NA in x, so it is removed.
Step 2: Identify remaining rows
Rows 1 and 3 remain. Row 1 has x=1, y=NA. Row 3 has x=3, y=3.
Final Answer:
x y
1 1 NA
3 3 3 -> Option A
Quick Check:
drop_na(df, x) removes rows with NA in x [OK]
Hint: drop_na(df, col) removes rows with NA in that column [OK]
Common Mistakes:
Removing rows with NA in all columns instead of specified
Confusing drop_na() with fill()
Expecting NA values to be replaced
5. You have a data frame df with columns time and temperature, where some temperature values are missing (NA). You want to fill missing temperatures by carrying the last known temperature forward, but only within each day (grouped by time). Which code correctly achieves this?
hard
A. df %>% fill(temperature, .direction = "up") %>% group_by(time)
B. df %>% group_by(time) %>% fill(temperature, .direction = "down")
C. df %>% fill(temperature, .direction = "down") %>% group_by(time)
D. df %>% group_by(time) %>% drop_na(temperature)
Solution
Step 1: Group data by time
Grouping by time ensures fill() works within each day separately.
Step 2: Use fill() with .direction = "down"
Filling downward copies last known temperature forward within each group.
Step 3: Check other options
df %>% fill(temperature, .direction = "down") %>% group_by(time) fills before grouping, so fill applies to whole data ignoring groups. df %>% fill(temperature, .direction = "up") %>% group_by(time) fills upward, which is opposite of requirement. df %>% group_by(time) %>% drop_na(temperature) drops rows with NA instead of filling.