0Pricing
R Academy · 课时

使用 rep() 重复值

使用 rep() 以及 times 和 each 参数重复值和向量

使用 rep() 重复值 是 CoddyKit 上的免费 R Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。

rep() 简介

rep() 是 replicate(重复)的缩写。它会按指定次数重复值或向量。它是创建结构化测试数据、均衡数据集以及用默认值填充向量的实用工具之一。

# 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) — 重复整个向量

当 x 是向量且 times 是单个整数时,rep() 会将整个向量重复指定次数。输出长度为 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) — 重复每个元素

each 参数会在处理下一个元素之前重复每个单独的元素。这与 times 的主要区别在于:each 会在原位置重复元素。

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 C

rep(x, times = c(...)) — 重复次数可变

当 times 是一个与 x 长度相同的向量时,x 的每个元素都会按照对应的次数重复。这可以对重复过程进行精细控制。

# 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() — 重复至固定长度

rep_len(x, length.out) 会重复向量 x,直到结果恰好达到 length.out 个元素。重复过程是循环的——需要时会从向量开头继续。

# 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, '
')

组合使用 times 和 each

您可以同时使用 times 和 each 来创建更复杂的重复模式。R 会先应用 each(扩展每个元素),然后将得到的向量重复 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), '
')

创建均衡的组标签

rep() 的经典用途是为实验创建均衡的组标签,即希望每组包含相同数量的观测值。

# 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), '
')
}

重复逻辑值

rep() 适用于任何数据类型,包括逻辑值。这对于创建掩码、标志或交替排列的 TRUE/FALSE 模式很有用。

# 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() 填充矩阵

您可以使用 rep() 快速用具有规律的数据填充矩阵。由于 matrix() 接受向量作为输入,将它与 rep() 结合使用即可轻松创建模式矩阵。

# 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, '
')

展开汇总表

rep() 与可变 times 的一个实用用途是将频数表还原为原始数据向量。如果您知道每个值出现的次数,rep() 就能重建这些观测值。

# 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() 总结

以下是 rep() 的快速参考:

  • rep(x, times = n) — 将整个 x 重复 n 次
  • rep(x, each = n) — 将每个元素重复 n 次
  • rep(x, times = c(...)) — 为各元素指定不同的重复次数
  • rep_len(x, n) — 循环重复 x,直到恰好达到 n 个元素
  • 适用于任何类型:数值型、字符型、逻辑型、因子型
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), '
')

快速检查

rep(c(1, 2), each = 3) 会生成什么结果?

回顾:使用 rep() 重复值

非常好!本课的要点如下:

  • rep(x, times) 重复整个向量;rep(x, each) 单独重复每个元素
  • 向 times 传入向量,可以为每个元素指定不同的重复次数
  • rep_len(x, n) 会循环重复 x,直到恰好生成 n 个元素
  • 常见用途:均衡的组标签、掩码、展开频数表、模式矩阵
  • 对数值型、字符型和逻辑型数据的工作方式相同
# 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), '
')

常见问题解答

「使用 rep() 重复值」课时是免费的吗?

是的 — 「使用 rep() 重复值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。

「使用 rep() 重复值」这节课中我会学到什么?

使用 rep() 以及 times 和 each 参数重复值和向量 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 R Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 rep() 重复值」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 R Academy 课中编写并运行代码吗?

能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 用于整数范围的冒号运算符
  2. 使用 seq() 创建自定义序列
  3. 使用 rep() 重复值
  4. 命名向量与命名序列
← 返回 R Academy