本教程介绍如何识别和删除R中的重复数据。
您将学习如何使用以下R base和dplyr函数:
1)R基础函数
duplicated():用于标识重复的元素和
unique():用于提取唯一元素,
2)distinct()[dplyr package]删除数据框中的重复行。
必需的包
演示数据集
查找并删除重复元素
提取独特元素
删除数据框中的重复行
总结
需要的包
library(tidyverse)
示例数据集
我们将使用R内置的iris数据集,首先将其转换为tibble数据帧(tbl_df),以便于进行数据分析。
my_data <- as_tibble(iris)
my_data
查找并删除重复的元素
R函数 duplicate() 返回一个逻辑向量,其中TRUE指定向量或数据帧的哪些元素是重复的。
创建如下向量:
x <- c(1,1,4,5,4,6)
要查找x中重复元素的位置,请使用以下命令:
duplicated(x)
## [1] FALSE TRUE FALSE FALSE TRUE FALSE
提取重复元素:
x[duplicated(x)]
## [1] 1 4
如果您想删除重复的元素,请使用 !duplicate(),!意思是逻辑否定:
x[!duplicated(x)]
## [1] 1 4 5 6
按照这种方法,可以根据列值从数据框中删除重复的行,如下所示
# Remove duplicates based on Sepal.Width columnsmy_data[!duplicated(my_data$Sepal.Width), ]
提取非重复的元素
x <- c(1,1,4,5,4,6)
unique(x)
## [1] 1 4 5 6
也可以在数据框上应用unique(),以删除重复的行,如下所示:
unique(my_data)
删除数据帧中的重复行
distinct() [dplyr包]函数可用于仅保留数据帧中的唯一/不同行。如果有重复的行,则只保留第一行。它是R基函数unique()的变形。
基于所有列,删除重复行
my_data %>% distinct()
基于某些列(变量),删除重复的行:
# Remove duplicated rows based on Sepal.Length
my_data %>% distinct(Sepal.Length, .keep_all =TRUE)
# Remove duplicated rows based on # Sepal.Length and Petal.Widthmy_data %>% distinct(Sepal.Length, Petal.Width, .keep_all =TRUE)
参数 .kep_all用于保存数据中的所有变量。
总结
在本章中,我们描述了识别和删除重复数据的重要函数:
基于一个或多个列值删除重复行:my_data%>%dplyr::distinct(Sepal.Length)
从向量和数据框中提取唯一元素的R基函数:unique(my_data)
确定重复元素的R基函数:duplicate(my_data)