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

如何优雅重排2N行的data.table,避免连续行重复?

问题解答

给定包含2N行且至少有N个唯一行的data.table数据,完全可以实现优雅重排,让每一行都与上一行不重复。

实现思路

核心逻辑是把相同内容的行归类分组,给每组内的行按顺序分配序号,再按这个序号排序——这样能强制不同内容组的行交错排列,自然避免连续重复。由于题目保证至少有N个唯一行、总行数为2N,任何单一内容的行最多只会出现N次,交错后绝不会出现连续重复的情况。

代码实现

library(data.table)

reorder_function <- function(dt) {
  # 按全行内容分组,给每组内的行分配序号
  dt[, seq_id := seq_len(.N), by = names(dt)]
  # 按序号排序实现交错,最后移除临时辅助列
  dt[order(seq_id)][, seq_id := NULL]
}

# 测试示例
df <- data.table(
  a = rep(2, 4),
  b = c(2, 2, 1, 1)
)

# 调用重排函数
reorder_function(df)

示例输出

运行后会得到符合要求的重排结果(输出不唯一,只要满足无连续重复即可):

a b
1: 2 2
2: 2 1
3: 2 2
4: 2 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:45:37