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
相关产品推荐
相关产品推荐

