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

如何用dplyr::filter()筛选符合语言变化规则的DataFrame行?

解决方案

要实现需求,核心是先按ID分组做整体条件校验,再筛选符合条件的ID对应的所有行——因为我们要保留的是整个ID的全部行,而非单个满足条件的行。

代码实现

library(dplyr)

# 加载示例数据
DATA <- read.table(header=TRUE,text="
ID Type Year Language
1  1A   1718 spanish
1  1A   1819 spanish
1  5F   1920 English
2  1B   1718 spanish
2  1B   1819 spanish
2  1B   1920 spanish
2  5F   2021 spanish
3  1B   1920 English
3  5F   2021 English")

# 筛选符合条件的ID的所有行
filtered_data <- DATA %>%
  group_by(ID) %>%
  filter(
    # 所有非5F类型的行,Language都不是英语
    all(Language != "English" & Type != "5F") &
    # 若存在5F类型的行,这些行的Language必须是English
    all(ifelse(Type == "5F", Language == "English", TRUE))
  ) %>%
  ungroup()

# 查看结果
filtered_data

代码说明

  • group_by(ID):按ID分组,确保我们对每个ID的所有行做统一校验
  • 第一个条件all(Language != "English" & Type != "5F"):校验该ID下所有非5F类型的行,语言均不为英语
  • 第二个条件all(ifelse(Type == "5F", Language == "English", TRUE)):仅对5F类型的行校验语言是否为英语,非5F行不参与此分支判断
  • ungroup():取消分组,恢复常规数据框格式

运行结果

执行后得到的结果与你提供的Desired_output完全一致:

# A tibble: 3 × 4
     ID Type  Year Language
  <int> <chr> <int> <chr>   
1     1 1A    1718 spanish 
2     1 1A    1819 spanish 
3     1 5F    1920 English 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:13:15