如何从含重复与唯一记录的数据集中提取仅无重复记录的数据集?
提取数据集中的唯一记录(无重复行)
我来帮你搞定这个问题!你想要提取的是那些在x列中完全没有重复值的记录(也就是示例里的D和C),而你之前的代码逻辑刚好搞反了,所以得到了重复的记录。下面给你两种简单的解决方法:
方法一:基础R实现
不需要额外包,用基础函数就能完成:
- 先统计
x列每个值的出现次数 - 筛选出出现次数为1的
x值 - 从原数据集中提取对应行
完整代码:
# 你的示例数据集 x <- c("A","B","B","D","A","C","B","A") y <- c(1,2,3,4,5,6,7,8) z <- c(8,7,6,5,4,3,2,1) Data <- data.frame(x,y,z) # 步骤1:统计x列各值的出现次数 x_counts <- table(Data$x) # 步骤2:提取仅出现1次的x值 unique_x_values <- names(x_counts[x_counts == 1]) # 步骤3:筛选出对应行 NewData <- Data[Data$x %in% unique_x_values, ] # 查看结果 NewData
运行后会得到你期望的结果:
x y z 4 D 4 5 6 C 6 3
方法二:用dplyr包(更简洁的tidyverse风格)
如果你习惯用tidyverse工具链,dplyr的分组筛选会更直观:
library(dplyr) NewData <- Data %>% group_by(x) %>% # 按x列分组 filter(n() == 1) # 只保留分组内行数为1的组
为什么你的原代码不对?
你之前的代码:
unique <- Data[!duplicated(Data),] NewData <- unique[unique$x %in% unique$x[duplicated(unique$x)],]
- 第一行
Data[!duplicated(Data),]得到的是去重后的所有行(每个重复组只保留第一条,比如A、B、D、C) - 第二行又筛选了
x在重复列表里的行,所以最终得到的是A和B的记录(也就是原本有重复的组),和你想要的完全相反啦。
内容的提问来源于stack exchange,提问作者Shank
相关产品推荐
相关产品推荐

