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

如何使用dplyr为纵向数据框在不同OCC间插入指定行?

dplyr 解决方案:在不同场合间插入指定行

假设你的数据框结构如下(示例数据):

library(dplyr)

# 构造示例数据
df <- tibble(
  ID = rep(1:2, each = 3),
  OCC = c(1,1,2,1,2,2),
  TIME = c(0, 24, 48, 0, 24, 48),
  ADMIN = c(1,0,1,1,1,0),
  VALUE = c(10, 8, 12, 15, 18, 16)
)

按以下步骤实现需求:

  1. 按ID分组,标记需要插入行的位置,同时获取下一行的TIME和OCC
df_processed <- df %>%
  group_by(ID) %>%
  mutate(
    next_OCC = lead(OCC),
    next_TIME = lead(TIME),
    insert_flag = if_else(OCC != next_OCC & !is.na(next_OCC), TRUE, FALSE)
  ) %>%
  ungroup()
  1. 提取需插入的行,将除OCC、TIME外的列设为0
insert_rows <- df_processed %>%
  filter(insert_flag) %>%
  transmute(
    ID = ID,
    OCC = OCC,
    TIME = next_TIME,
    # 批量设置其他列为0,可根据实际列名调整
    across(c(ADMIN, VALUE), ~0)
  )
  1. 合并原数据与插入行,按ID和TIME排序并清理临时列
final_df <- bind_rows(df, insert_rows) %>%
  arrange(ID, TIME) %>%
  select(-next_OCC, -next_TIME, -insert_flag)

处理后,每个ID的不同OCC之间会插入符合要求的新行:新行OCC取自上一行,TIME取自下一行,其余列值为0。如果数据有更多需设为0的列,只需在across()中补充列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:25:57