参考:
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]删除数据框中的重复行。
> 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()
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)
网友评论