Manipulating Data-用R查找并移除重复的记录

问题

你想查找和(或)移除向量或列表里重复项。

方案

向量:

# 生成一个向量
set.seed(158)
x <- round(rnorm(20, 10, 5))
x
#>  [1] 14 11  8  4 12  5 10 10  3  3 11  6  0 16  8 10  8  5  6  6

# 对于每一个元素:它是否重复(第一个值不算)
duplicated(x)
#>  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
#> [15]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

# 重复项的值
# 注意“6”出现了三次,所以它有俩
x[duplicated(x)]
#> [1] 10  3 11  8 10  8  5  6  6

# 重复的条目,没有重复
unique(x[duplicated(x)])
#> [1] 10  3 11  8  5  6

# 移除重复的数据,他们效果一样:
unique(x)
#>  [1] 14 11  8  4 12  5 10  3  6  0 16
x[!duplicated(x)]
#>  [1] 14 11  8  4 12  5 10  3  6  0 16

列表:

# 一个样本列表:
df <- read.table(header=TRUE, text='
 label value
     A     4
     B     3
     C     6
     B     3
     B     1
     A     2
     A     4
     A     4
')


# 每一行是否有重复?
duplicated(df)
#> [1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE

# 显示重复项
df[duplicated(df),]
#>   label value
#> 4     B     3
#> 7     A     4
#> 8     A     4

# 显示唯一重复项 (行名可能不同,但值相同)
unique(df[duplicated(df),])
#>   label value
#> 4     B     3
#> 7     A     4

# 移除重复的数据,他们效果一样:
unique(df)
#>   label value
#> 1     A     4
#> 2     B     3
#> 3     C     6
#> 5     B     1
#> 6     A     2
df[!duplicated(df),]
#>   label value
#> 1     A     4
#> 2     B     3
#> 3     C     6
#> 5     B     1
#> 6     A     2

原文链接:http://www.cookbook-r.com/Manipulating_data/Finding_and_removing_duplicate_records/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,907评论 0 8
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,926评论 1 10
  • 问题 你想将一个向量,矩阵或列表排序 解决 向量 列表 列表在一个或多个列进行排序,您可以使用plyr包里的arr...
    杏月阿六阅读 1,991评论 1 1
  • 轻易得到的,不会懂得呵护;得之不易的,才会加珍惜;得而不到的,才会誓死铭记——人心向来如此。 我们不肯...
    跳跳呆阅读 333评论 0 0
  • 梦里的我没主见。 她说要回家,我想都没想买了回家的机票。 离登机只剩两小时,我来不及到机场了,307的机票费要泡汤...
    曾雅子阅读 236评论 0 0