在R语言中识别col1为NA与非NA配对的特定部分重复行
在R语言中识别特定的部分重复行
需求说明
需要筛选满足以下条件的行:
- 同一组行中,一行col1为非NA,另一行col1为NA
- 除col1和col2外,其余所有列的值完全一致
示例数据
df <- read.table(text = " col1 col2 col3 col4 col5 a 928 0 TRUE 1 b 1028 0 FALSE 1 c 394 1 TRUE 1 NA 239 4 TRUE 0 NA 102 0 TRUE 1", header = TRUE)
解决方案
方法1:使用dplyr(适合常规数据量)
library(dplyr) result <- df %>% # 按除col1、col2外的所有列分组 group_by(across(-c(col1, col2))) %>% # 筛选分组内同时存在col1非NA和NA的行 filter(sum(!is.na(col1)) > 0 & sum(is.na(col1)) > 0) %>% ungroup()
方法2:使用data.table(适合大数据量,效率更高)
library(data.table) setDT(df) # 按col3、col4、col5分组,筛选符合条件的分组行 result <- df[, if (sum(!is.na(col1)) > 0 & sum(is.na(col1)) > 0) .SD, by = .(col3, col4, col5)]
结果验证
运行上述代码后,result将输出符合条件的行:
# col1 col2 col3 col4 col5 # 1 a 928 0 TRUE 1 # 2 <NA> 102 0 TRUE 1
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

