R语言:提取数据框中ID2为NA的唯一行
解决ID2为NA的唯一行提取问题
嘿,我明白你的困扰了!你用subset命令只筛选出了所有ID2为NA的行,但里面包含重复的ID1记录,所以才返回了4行。要拿到ID1唯一的那两行,只需要在筛选后加一步去重操作就行,下面给你两种可行的方案:
方案1:用tidyverse工具链(直观易读)
如果你习惯用dplyr包的话,这个方法很清晰:
首先先构造一个和你数据类似的示例(方便你对应):
# 模拟你的数据框:ID2全为NA,ID1有重复 df <- data.frame( ID1 = c(1, 2, 3, 3, 4, 4), ID2 = c(NA, NA, NA, NA, NA, NA), OtherCol = c("a", "b", "c", "c", "d", "d") )
然后执行筛选+去重:
library(dplyr) target_df <- df %>% filter(is.na(ID2)) %>% # 筛选ID2为NA的行 distinct(ID1, .keep_all = TRUE) # 按ID1去重,保留所有列
这里的.keep_all = TRUE很关键,它会让你保留数据框的所有列,而不只是ID1列。
方案2:基础R实现(无需额外安装包)
如果你不想用第三方包,用基础R的函数也能搞定:
# 先筛选ID2为NA的行 na_subset <- subset(df, is.na(ID2)) # 去掉ID1重复的行,只保留每个ID1第一次出现的记录 target_df <- na_subset[!duplicated(na_subset$ID1), ]
duplicated()函数会标记出重复的行,取反(!)就能保留唯一的那些行。
这样处理后,你就能得到ID1为3和4的唯一两行数据框啦!
内容的提问来源于stack exchange,提问作者string
相关产品推荐
相关产品推荐

