You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tidyverse在R中重复数据框内包含特定值的行?

基于tidyverse的极简实现方案

核心使用tidyr包的uncount()函数,该函数专门用于根据指定的计数重复对应行,代码如下:

library(tidyverse)

# 原始数据
df <- data.frame(name1 = c("x","y","z"),
                 name2 = c(0,1,2))

# 处理代码
result <- df %>%
  # 定义重复次数:x/y行重复2次,其余行保留1次
  mutate(repeat_n = ifelse(name1 %in% c("x", "y"), 2, 1)) %>%
  # 根据重复次数字段展开行,自动删除中间生成的repeat_n列
  uncount(repeat_n)

运行后输出的result即为需求结果:

name1 name2
1     x     0
2     x     0
3     y     1
4     y     1
5     z     2

备选实现(行筛选拼接法)

如果不想新增中间字段,也可以通过筛选+行绑定的方式实现:

result <- df %>%
  # 筛选出需要重复的行,和原数据直接拼接
  bind_rows(filter(., name1 %in% c("x", "y"))) %>%
  # 按name1排序保证输出顺序符合要求
  arrange(name1)

两种方案都属于tidyverse生态内的标准写法,第一种逻辑更清晰,也不会打乱原始数据的行相对顺序,更推荐使用。

内容的提问来源于stack exchange,提问作者Anh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:06:02