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

如何在R中按v1值变化条件新增行并调整t1列值

在R中处理大文件的分组数据修改需求

现有如下数据框df:

v1  t1  c1  o1
1   1   9   1
1   1   12  2
1   2   2   1
1   2   7   2
2   1   3   1
2   1   6   2
2   2   3   1
2   2   12  2

需求说明:每次v1的值发生变化时,新增两行全1的记录(其中o1分别为1和2),同时将原对应v1分组的t1值加1,最终目标结果如下:

v1  t1  c1  o1
1   1   1   1
1   1   1   2
1   2   9   1
1   2   12  2
1   3   2   1
1   3   7   2
2   1   1   1
2   1   1   2
2   2   3   1
2   2   6   2
2   3   3   1
2   3   12  2

高效解决方案(基于data.table,适配大文件)

针对大文件处理,优先选择data.table,它的内存效率和运算速度更优:

  1. 加载并转换数据结构:
library(data.table)
dt <- as.data.table(df)
  1. 生成每个v1分组对应的新增行:
add_rows <- dt[, .(t1 = 1, c1 = 1, o1 = 1:2), by = v1]
  1. 对原数据的t1字段加1:
dt[, t1 := t1 + 1]
  1. 合并数据并排序:
result <- rbind(add_rows, dt)[order(v1, t1)]

备选方案(基于dplyr)

如果更熟悉tidyverse语法,可以用dplyr实现:

  1. 加载包并生成新增行:
library(dplyr)
library(tidyr) # 需要crossing函数

add_rows <- df %>%
  distinct(v1) %>%
  crossing(o1 = 1:2) %>%
  mutate(t1 = 1, c1 = 1)
  1. 修改原数据并合并排序:
result <- df %>%
  mutate(t1 = t1 + 1) %>%
  bind_rows(add_rows) %>%
  arrange(v1, t1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:03:19