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

如何按组替换DataFrame中上下值相同时的中间值?

解决方案

可以使用dplyr包结合lag()和lead()函数实现按组替换操作,核心思路是按组判断每行的上下值是否相等,满足条件则替换当前值:

library(dplyr)

df_processed <- df %>%
  group_by(group) %>%
  mutate(
    value = case_when(
      lag(value) == lead(value) ~ lag(value),
      TRUE ~ value
    )
  ) %>%
  ungroup()

print(df_processed)

代码说明

  • group_by(group):按group列分组处理,确保每组内的判断独立进行
  • lag(value):获取当前行的上一行value值
  • lead(value):获取当前行的下一行value值
  • case_when():条件判断,当上下值相等时,将当前行value替换为上一行的值,否则保留原值

运行上述代码后,输出结果与期望一致:

# A tibble: 16 × 2
   group value
   <chr> <dbl>
 1 A         2
 2 A         2
 3 A         2
 4 A         2
 5 A         2
 6 A         2
 7 A         2
 8 A         2
 9 B         3
10 B         3
11 B         3
12 B         3
13 B         3
14 B         3
15 B         4
16 B         4

如果不想依赖dplyr,也可以用基础R实现,通过分组循环处理:

df_processed_base <- df
group_indices <- split(seq(nrow(df)), df$group)

for (idx in group_indices) {
  for (i in idx[-c(1, length(idx))]) {
    if (df_processed_base$value[i-1] == df_processed_base$value[i+1]) {
      df_processed_base$value[i] <- df_processed_base$value[i-1]
    }
  }
}

print(df_processed_base)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:46