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

R语言:删除Col1与Col2值重复的行(将NA视为独立值)

过滤DataFrame:保留Col1与Col2非等值(含NA)的行

问题根源

直接使用Col1 != Col2会因为NA的存在返回NA,而R在筛选时会把NA视为FALSE,导致含NA的行被误删。我们需要仅剔除Col1和Col2均非NA且值完全相等的行,其余情况(任意一列是NA、或两列非NA但不等)全部保留。


基础R实现

testdf <- structure(list(POS = c(37, 44, 50, 83), Col1 = c("A", "C", NA, 
"G"), Col2 = c("A", NA, "T", "C")), class = "data.frame", row.names = c(NA, 
-4L))

# 筛选逻辑:排除"两列都非NA且相等"的行
filtered_df <- testdf[!(testdf$Col1 == testdf$Col2 & !is.na(testdf$Col1) & !is.na(testdf$Col2)), ]
filtered_df

输出结果:

POS Col1 Col2
2  44    C <NA>
3  50 <NA>    T
4  83    G    C

dplyr实现

无需rowwise,直接用向量级别的逻辑判断即可:

library(dplyr)

testdf %>%
  filter(!(Col1 == Col2 & !is.na(Col1) & !is.na(Col2)))

或者等价的直观逻辑表述:

testdf %>%
  filter(Col1 != Col2 | is.na(Col1) | is.na(Col2))

两种写法都会得到目标结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:21:03