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

如何移除DataFrame中同model和powertrain下被包含的时间范围行

解决方案

核心思路

不用生成完整年份列表,直接通过区间边界比较判断是否被包含,同时严格限定在model和powertrain分组内检查,既高效又逻辑准确。

代码实现

# 先加载dplyr包(未安装的话先运行 install.packages("dplyr"))
library(dplyr)

# 假设你的原始数据框名为df
df <- tibble(
  model = c("car1", "car1", "car1", "car1", "car2", "car2"),
  powertrain = c("diesel", "diesel", "electric", "diesel", "electric", "electric"),
  start_year = c(2010, 2011, 2010, 2015, 2012, 2010),
  end_year = c(2015, 2013, 2015, 2017, 2013, 2017)
)

# 过滤被包含的行
result_df <- df %>%
  group_by(model, powertrain) %>%
  filter(
    !row_number() %in% which(
      sapply(1:n(), function(i) {
        any(
          (start_year <= start_year[i]) & 
          (end_year >= end_year[i]) & 
          !(start_year == start_year[i] & end_year == end_year[i])
        )
      })
    )
  ) %>%
  ungroup()

# 查看最终结果
print(result_df)

代码说明

  1. 分组限定:按model和powertrain分组,确保只在同车型同动力系统的范围内检查区间包含关系,避免跨组误判。
  2. 区间判断逻辑:对每一行i,检查组内是否存在其他行满足:
    • 其他行的起始年份 ≤ 当前行起始年份
    • 其他行的结束年份 ≥ 当前行结束年份
    • 两行区间不完全一致(防止误删和自身完全相同的行)
  3. 过滤操作:移除所有被同组其他区间完全包含的行,保留未被包含的有效行。

最终结果

运行后会保留以下行:

modelpowertrainstart_yearend_year
car1diesel20102015
car1electric20102015
car1diesel20152017
car2electric20102017

内容的提问来源于stack exchange,提问作者rösti23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:40:24