rep() for Repeating Values
Repeat values and vectors with rep(), times, and each arguments.
rep() for Repeating Values is a free R Academy lesson on CoddyKit — lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the R Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Introduction to rep()
rep() stands for replicate. It repeats values or vectors a specified number of times. It is one of the most useful tools for creating structured test data, balanced datasets, and filling vectors with default values.
# Repeat a single value
zeros <- rep(0, times = 5)
cat('Five zeros:', zeros, '
')
# Repeat a string
status <- rep('active', times = 4)
cat('Status:', status, '
')rep(x, times) — Repeat Whole Vector
When x is a vector and times is a single integer, rep() repeats the entire vector that many times. The output length is length(x) * times.
# Repeat a vector 3 times
weekend <- c('Saturday', 'Sunday')
four_weekends <- rep(weekend, times = 4)
cat('4 weekends:', four_weekends, '
')
# Repeat numeric vector
pattern <- c(1, 2, 3)
cat('Pattern x3:', rep(pattern, times = 3), '
')rep(x, each) — Repeat Each Element
The each argument repeats each individual element before moving to the next one. This is the key difference from times: each repeats elements in place.
groups <- c('A', 'B', 'C')
# times: repeats whole vector
cat('times=3:', rep(groups, times = 3), '
')
# A B C A B C A B C
# each: repeats each element before next
cat('each=3 :', rep(groups, each = 3), '
')
# A A A B B B C C Crep(x, times = c(...)) — Variable Repeats
When times is a vector of the same length as x, each element of x is repeated the corresponding number of times. This gives fine-grained control over repetition.
# Different number of repeats per element
fruits <- c('apple', 'banana', 'cherry')
counts <- c(3, 1, 2)
fruit_basket <- rep(fruits, times = counts)
cat('Fruit basket:', fruit_basket, '
')
# apple apple apple banana cherry cherry
# Useful for creating category labels
cat('Length:', length(fruit_basket), '
')rep_len() — Repeat to Fixed Length
rep_len(x, length.out) repeats vector x until the result reaches exactly length.out elements. The repetition is cyclic — it wraps around the vector as needed.
# Cycle through seasons to fill 12 months
seasons <- c('Spring', 'Summer', 'Autumn', 'Winter')
year_seasons <- rep_len(seasons, length.out = 12)
cat('12 months by season:', year_seasons, '
')
# Cycle through 1, 2, 3 for 10 items
rotation <- rep_len(1:3, length.out = 10)
cat('Rotation:', rotation, '
')Combining times and each
You can use times and each together to create more complex repetition patterns. R applies each first (expanding each element), then repeats the resulting vector times times.
# each=2 then times=3
vals <- c(1, 2)
result <- rep(vals, each = 2, times = 3)
cat('each=2, times=3:', result, '
')
# 1 1 2 2 repeated 3 times: 1 1 2 2 1 1 2 2 1 1 2 2
cat('Length:', length(result), '
')Creating Balanced Group Labels
A classic use of rep() is creating balanced group labels for experiments — where you want an equal number of observations in each group.
# 5 subjects per treatment group
treatments <- c('Control', 'LowDose', 'HighDose')
n_per_group <- 5
group_labels <- rep(treatments, each = n_per_group)
cat('Group labels:', group_labels, '
')
cat('Total subjects:', length(group_labels), '
')
# Count per group
for (g in treatments) {
cat(g, ':', sum(group_labels == g), '
')
}Repeating Logical Values
rep() works with any data type, including logical values. This is useful for creating masks, flags, or alternating TRUE/FALSE patterns.
# Alternating TRUE/FALSE pattern
alternate <- rep(c(TRUE, FALSE), times = 5)
cat('Alternating mask:', alternate, '
')
# Apply mask to select every other element
data_vals <- 10:19
cat('Every other value:', data_vals[alternate], '
')
# Create a block pattern: 3 TRUE then 3 FALSE
block <- rep(c(TRUE, FALSE), each = 3)
cat('Block pattern:', block, '
')rep() for Matrix Filling
You can use rep() to quickly fill matrices with patterned data. Since matrix() accepts a vector as input, combining it with rep() makes pattern matrices easy.
# Fill a 3x4 matrix with a repeating pattern
pattern <- rep(c(1, 0), times = 6)
checker <- matrix(pattern, nrow = 3, ncol = 4)
cat('Checkerboard-like matrix:
')
print(checker)
# Fill diagonal-like with rep
fill <- rep(1:4, each = 3)
cat('Repeated fill:', fill, '
')Expanding a Summary Table
A practical use of rep() with variable times: converting a frequency table back into a raw data vector. If you know how many times each value occurred, rep() reconstructs the observations.
# Summary: grade frequencies
grades <- c('A', 'B', 'C', 'D')
frequencies <- c(5, 12, 8, 3)
# Reconstruct raw grade vector
raw_grades <- rep(grades, times = frequencies)
cat('Raw grades (', length(raw_grades), 'students):', raw_grades, '
')
# Verify frequency table
cat('Freq table:
')
print(table(raw_grades))rep() Summary
Here is a quick reference for rep():
rep(x, times = n)— repeat entire x n timesrep(x, each = n)— repeat each element n timesrep(x, times = c(...))— variable repeats per elementrep_len(x, n)— cycle x to reach exactly n elements- Works with any type: numeric, character, logical, factor
x <- c(10, 20, 30)
cat('times=2 :', rep(x, times = 2), '
')
cat('each=2 :', rep(x, each = 2), '
')
cat('var times:', rep(x, times = c(1, 2, 3)), '
')
cat('rep_len :', rep_len(x, 7), '
')Quick Check
What does rep(c(1, 2), each = 3) produce?
Recap: rep() for Repeating Values
Excellent! Key takeaways from this lesson:
rep(x, times)repeats the whole vector;rep(x, each)repeats each element individually- Passing a vector to
timesgives variable repetition counts per element rep_len(x, n)cycles x until exactly n elements are produced- Common uses: balanced group labels, masks, frequency table expansion, pattern matrices
- Works identically with numeric, character, and logical data types
# Create a balanced experiment design
treatments <- c('Placebo', 'Drug_A', 'Drug_B')
subjects_per <- 4
design <- rep(treatments, each = subjects_per)
cat('Experiment design:
')
cat(design, '
')
cat('Total N:', length(design), '
')Frequently asked questions
Is the “rep() for Repeating Values” lesson free?
Yes — the full text of “rep() for Repeating Values” is free to read here on the web, and the R Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the R Academy course, upgrade to CoddyKit PRO.
What will I learn in “rep() for Repeating Values”?
Repeat values and vectors with rep(), times, and each arguments. You practise R Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start R Academy?
No prior experience is required. R Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “rep() for Repeating Values” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this R Academy lesson?
Yes. Every R Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- The Colon Operator for Integer Ranges
- seq() for Custom Sequences
- rep() for Repeating Values
- Named Vectors and Named Sequences