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

如何不使用循环删除R dataframe中列值组合存在冲突的行

实现方案

dplyr 实现方法

你要的效果可以直接用分组过滤实现,无需自己写循环:

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

# 构造示例数据
df <- data.frame(
  x = c("a","a","b","b","c"), 
  y = c("yes","no", "yes","yes","no")
)

# 核心逻辑:按x分组后保留y唯一值数量为1的所有行
result <- df %>%
  group_by(x) %>%
  filter(n_distinct(y) == 1) %>%
  ungroup()

运行后输出结果和你要求的完全一致:

> result
# A tibble: 3 × 2
  x     y    
  <chr> <chr>
1 b     yes  
2 b     yes  
3 c     no   

逻辑说明:n_distinct(y)会计算每个x分组内y列的唯一值数量,只有数量等于1的分组会被整体保留,正好匹配你的规则:过滤y存在多种取值的a分组,同时保留仅出现一次的c分组、y取值全一致的b分组。

base R 实现方法(无需额外安装包)

如果不想依赖第三方包,也可以用向量化函数ave实现,效率远高于手动循环:

df <- data.frame(
  x = c("a","a","b","b","c"), 
  y = c("yes","no", "yes","yes","no")
)
result <- df[ave(df$y, df$x, FUN = function(v) length(unique(v))) == 1, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:06:04