关于dplyr::slice()与rep()组合实现数据框行重复的原理问询
拆解
slice(df, rep(1:n(), each = 3))的执行逻辑 我们可以把这条命令拆成两个关键环节来看,就能明白它怎么实现每行重复3次的效果:
1. 先生成重复的行索引序列
- 首先,
n()在这里就是原数据框df的行数——也就是3,所以1:n()会生成一个简单的索引序列:1, 2, 3。 - 接着
rep(1:n(), each = 3)会把这个序列里的每个元素都重复3次,最终得到的索引列表是:1, 1, 1, 2, 2, 2, 3, 3, 3。
2. slice()按索引提取行
dplyr::slice()的工作逻辑很直接:你给它一组行索引,它就按照顺序依次提取对应位置的行:
- 前三个
1会连续提取df的第1行(也就是Column1="a", Column2=1)三次; - 中间三个
2连续提取df的第2行(Column1="b", Column2=2)三次; - 最后三个
3连续提取df的第3行(Column1="c", Column2=3)三次。
最终结果
这样组合下来,生成的df2就是一个9行的数据集,原df的每一行都被重复了3次,完全符合需求。
内容的提问来源于stack exchange,提问作者kyarudata
相关产品推荐
相关产品推荐

