美文网首页R生信相关数据、字符R处理
【R去重】 保留第一个重复/去所有的重复

【R去重】 保留第一个重复/去所有的重复

作者: caokai001 | 来源:发表于2020-05-17 09:53 被阅读0次

参考:

R语言第二章数据处理③删除重复数据
果子学生信


1.保留第一个重复: A,A,B,C --->A,B,C
2.去掉所有重复:A,A,B,C --->B,C
一般情况函数默认都是保留第一个重复。

比如:

a <- c(rep("A", 3), rep("B", 1), rep("C",2),LETTERS[4:7])
b <- c(1,1,2,4,1,2,2,5,6,5)
df <-data.frame(a,b,stringsAsFactors = F)
df
   a b
1  A 1
2  A 1
3  A 2
4  B 4
5  C 1
6  C 2
7  D 2
8  E 5
9  F 6
10 G 5

df[!duplicated(df$a),]
   a b
1  A 1
4  B 4
5  C 1
7  D 2
8  E 5
9  F 6
10 G 5

0.首先计算各项频数

  • table函数可以展示重复项的频数
table(df$a)
A B C D E F G 
3 1 2 1 1 1 1 
  • group_by联合summarise函数,可以实现分组内批量操作
library(dplyr)
df %>% 
  group_by(a) %>% 
  summarise(n=n())
# A tibble: 7 x 2
  a         n
  <chr> <int>
1 A         3
2 B         1
3 C         2
4 D         1
5 E         1
6 F         1
7 G         1
  • dplyr中的count函数
df %>% 
  count(a)
# A tibble: 7 x 2
  a         n
  <chr> <int>
1 A         3
2 B         1
3 C         2
4 D         1
5 E         1
6 F         1
7 G         1
  • do
df %>% 
  group_by(a) %>% 
  do(data.frame(nrow=nrow(.)))
# A tibble: 7 x 2
# Groups:   a [7]
  a      nrow
  <chr> <int>
1 A         3
2 B         1
3 C         2
4 D         1
5 E         1
6 F         1
7 G         1

1.保留第一个重复

在R中识别和删除重复数据:

  • duplicated():用于识别重复的元素和
  • unique():用于提取唯一元素,
  • distinct()[dplyr package]删除数据框中的重复行。
image.png
> df$a[!duplicated(df$a)]
[1] "A" "B" "C" "D" "E" "F" "G"

> tbl_df(df) %>% dplyr::distinct(a)
# A tibble: 7 x 1
  a    
  <chr>
1 A    
2 B    
3 C    
4 D    
5 E    
6 F    
7 G    
> unique(df$a)
[1] "A" "B" "C" "D" "E" "F" "G"

2.去所有的重复

主要运用dplyr::n()

image.png
a <- c(rep("A", 3), rep("B", 1), rep("C",2),LETTERS[4:7])
b <- c(1,1,2,4,1,2,2,5,6,5)
df <-data.frame(a,b,stringsAsFactors = F)
df
df[!duplicated(df$a),]

## 方法0
df[!(df$a %in% unique(df$a[duplicated(df$a)])),]
   a b
4  B 4
7  D 2
8  E 5
9  F 6
10 G 5



## 方法1
df %>% 
  count(a) %>% 
  filter(n==1) %>% 
  inner_join(df,by="a") %>% 
  select(-n)


## 方法2
> df %>% group_by(a) %>% mutate(n=n()) %>% 
  filter(n==1) %>% select(-n)
# A tibble: 5 x 2
# Groups:   a [5]
  a         b
  <chr> <dbl>
1 B         4
2 D         2
3 E         5
4 F         6
5 G         5


## 方法3
> df %>%  group_by(a) %>% 
+   filter(n()==1)
# A tibble: 5 x 2
# Groups:   a [5]
  a         b
  <chr> <dbl>
1 B         4
2 D         2
3 E         5
4 F         6
5 G         5

Tips:do 包类似功能.

do包中的duplicate()命令和duplicated()命令的主要区别是前者包含了所有重复项,后者不包含重复的第一项。
duplicate()命令在开发版的do包中,CRAN上的do包并不包含这一命令。
安装方法是devtools:install_github("yikeshu0611/do")

1,检查向量内的重复值
duplicate(x=df[,1])
2,column_between等于TRUE,检查重复列
duplicate(x=df,column_between=TRUE)
3,row_between等于TRUE,检查重复行
duplicate(x=df,row_between=TRUE)
4,row_in等于TRUE,检查每行内重复值
duplicate(x=df,row_in=TRUE)
5,column_in等于TRUE,检查每列内重复值
duplicate(x=TRUE,column_in=TRUE)
6,every等于TRUE,检查整个数据框或者矩阵内重复值
duplicate(x=df,every=TRUE)

思考:

去掉所有重复最简洁函数: df %>% group_by(a) %>% filter(n()==1)

相关文章

网友评论

    本文标题:【R去重】 保留第一个重复/去所有的重复

    本文链接:https://www.haomeiwen.com/subject/kzsjohtx.html