如何使用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) )
按以下步骤实现需求:
- 按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()
- 提取需插入的行,将除OCC、TIME外的列设为0
insert_rows <- df_processed %>% filter(insert_flag) %>% transmute( ID = ID, OCC = OCC, TIME = next_TIME, # 批量设置其他列为0,可根据实际列名调整 across(c(ADMIN, VALUE), ~0) )
- 合并原数据与插入行,按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
相关产品推荐
相关产品推荐

