R语言 删除重复值

最近手头下了一批数据,想要删除其中的重复值,比如:
> data.set
   Ensembl.Gene.ID Gene.Biotype Chromosome.Name Gene.Start..bp. Gene.End..bp.
1  ENSG00000236666    antisense              22        16274560      16278602
2  ENSG00000236666    antisense              22        16274560      16278602
3  ENSG00000234381   pseudogene              22        16333633      16342783
4  ENSG00000234381   pseudogene              22        16333633      16342783
5  ENSG00000234381   pseudogene              22        16333633      16342783
6  ENSG00000234381   pseudogene              22        16333633      16342783
7  ENSG00000234381   pseudogene              22        16333633      16342783
8  ENSG00000234381   pseudogene              22        16333633      16342783
9  ENSG00000234381   pseudogene              22        16333633      16342783
10 ENSG00000224435   pseudogene              22        16345912      16355362

在这个数据中,Ensembl.Gene.ID中只有三个值,其余都是重复值,现在想要根据Ensembl.Gene.ID列重新生成数据,如:
> data.set2
   Ensembl.Gene.ID Gene.Biotype Chromosome.Name Gene.Start..bp. Gene.End..bp.
1  ENSG00000236666    antisense              22        16274560      16278602
3  ENSG00000234381   pseudogene              22        16333633      16342783
10 ENSG00000224435   pseudogene              22        16345912      16355362

那么,在进行这个数据处理的时候也想过用excel来解决,但是excel毕竟有他的局限性,不能处理大批量的数据,所以还是想能够用R语言来处理这批数据。
在网上以及几本主要的R语言书籍中都找了下,没有发现有效的处理办法。
但是获取了一个比较好的解决思路:用duplicated函数
duplicated函数是一个可以用来解决向量或者数据框重复值的函数,它会返回一个TRUE和FALSE的向量,以标注该索引所对应的值是否是前面数据所重复的值。

那么我们还是以文中开头提到的数据data.set为例来说明解决办法:
1、建立是否重复索引;
> index<-duplicated(data.set$Ensembl.Gene.ID)
> index
 [1] FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

2、生成新数据
那么到了这一步,应该是很多R语言爱好者都能够处理的问题了,但是我们会发现,我们要的那一行的值是FALSE,所以在后面我们用!来取反:
> data.set2<-data.set[!index,]
> data.set2
   Ensembl.Gene.ID Gene.Biotype Chromosome.Name Gene.Start..bp. Gene.End..bp.
1  ENSG00000236666    antisense              22        16274560      16278602
3  ENSG00000234381   pseudogene              22        16333633      16342783
10 ENSG00000224435   pseudogene              22        16345912      16355362

这样我们就大功告成了。
R语言中,剔除重复通常可以通过多种方法实现,以下是一些常见的方法: 1. 使用`unique()`函数: `unique()`函数可以返回一个向量、矩阵或数据框中的唯一。当你传递一个向量给这个函数时,它会返回一个新的向量,其中包含了所有不重复的元素。 ```R vec <- c(1, 2, 2, 3, 3, 3) unique_vec <- unique(vec) # 结果: [1] 1 2 3 ``` 2. 使用`duplicated()`函数结合索引: `duplicated()`函数可以返回一个逻辑向量,表示每个元素是否是重复的。结合负索引可以用来排除重复。 ```R vec <- c(1, 2, 2, 3, 3, 3) vec_no_duplicates <- vec[!duplicated(vec)] # 结果: [1] 1 2 3 ``` 3. 使用`distinct()`函数(需要`dplyr`包): 如果你正在处理数据框(data frames),`dplyr`包中的`distinct()`函数可以非常方便地去除重复的行。 ```R library(dplyr) df <- data.frame(x = c(1, 2, 2, 3, 3, 3), y = c("a", "b", "b", "c", "c", "c")) df_distinct <- distinct(df) # 结果: # x y # 1 1 a # 2 2 b # 3 3 c ``` 4. 使用`subset()`函数结合`duplicated()`(适合数据框): 也可以用`subset()`函数和`duplicated()`结合来去除数据框中的重复行。 ```R df <- data.frame(x = c(1, 2, 2, 3, 3, 3), y = c("a", "b", "b", "c", "c", "c")) df_no_duplicates <- subset(df, !duplicated(df)) # 结果同上 ``` 这些方法适用于不同的情况和数据结构,选择合适的方法可以帮助你高效地从数据中剔除重复。在处理数据框时,`dplyr`包提供的函数通常更为方便和直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值