大家好,之前有分享过添加新的行,俗话说有加就有减,因此这次分享的将是删除数据。之前有讲过通过索引进行删除数据,这次要分享的是删除重复数据,这也是数据预处理中很常用的一种处理要求。

删除重复数据的方式就多种,常见的是以下三种方式:

1,duplicated()函数

duplicated()函数能够确定向量或数据框中的重复元素,返回值为指出哪个或哪行是重复的逻辑型向量。

其完整形式为:duplicated(x, incomparables = FALSE, ...)。

其中,参数x可为向量、数据框、数组或NULL。

dbeaver替换postgresql db2 replace替换多个_db2 replace函数的用法

其中,向量a中第五个元素开始是重复的,因此后面几个元素返回值都为TRUE。数据框B中,第四行和第五行是和前面内容重复的,因此返回值的第四个第五个元素为TRUE。

参数incomparables指定的是不能进行比较的值形成的向量,默认取值为FALSE:

dbeaver替换postgresql db2 replace替换多个_pyspark 数据框 更改大小写_02

由于指定了参数incomparables=c(1,2),因此向量a中的1,2不在进行是否重复的比较,因此结果中第五个、第七个与第九个的结果不再是TRUE,而是FALSE。

此时,为了提取出不重复的元素,我们就可以通过以下方式进行提取:

向量名[!duplicated(向量名)]

即可提取出非重复的值(对于数据框的提取方法类似):

dbeaver替换postgresql db2 replace替换多个_keil5函数 默认返回值_03

对于数组数据也类似以上方式,由于很少用所以大家可以自己用软件进行实现。

需要进行进一步说下的是,与duplicated()函数常在一起用的一个函数是:anyDuplicated(.) 函数,这个函数是函数any(duplicated(.))的简写并且是更高效的版本。

duplicated()函数在S3中默认的使用方式为duplicated(x, incomparables = FALSE,fromLast = FALSE, nmax = NA, ...),其中个别参数也可以在R软件中使用。其中,duplicated(x, fromLast = TRUE) 等同于函数rev(duplicated(rev(x))),但是更高效:

dbeaver替换postgresql db2 replace替换多个_dbeaver替换postgresql_04

需要注意的是在数据框及数组的情况下,都是对每行进行的比较,只有两行中所有的元素都相同时duplicated()函数中相应的元素值才为TRUE:

dbeaver替换postgresql db2 replace替换多个_dbeaver替换postgresql_05

此时如果想删除course列中同名的行可以只对course列进行 !duplicate() 操作即可:

dbeaver替换postgresql db2 replace替换多个_pyspark 数据框 更改大小写_06

2,unique()函数

unique()函数返回的是一个没有重复元素(行)的向量、数据框或数组。

该函数的完整用法为:unique(x, incomparables = FALSE, ...)

dbeaver替换postgresql db2 replace替换多个_pyspark 数据框 更改大小写_07

注意:

unique()函数在S3中默认的用法为:unique(x, incomparables = FALSE, fromLast = FALSE,nmax = NA, ...)

unique()函数在S3中对于矩阵的默认用法为:unique(x, incomparables = FALSE, MARGIN = 1,fromLast = FALSE, ...)。

unique()函数在S3中对于数组的默认用法为:unique(x, incomparables = FALSE, MARGIN = 1,fromLast = FALSE, ...)。

3,dplyr包中的distinct()函数

distinct()函数是从数据框中筛选出唯一/不同的行。

此函数的完整用法为:distinct(.data, ..., .keep_all = FALSE)。其中参数.data指的主要是数据框数据。参数...指确定惟一性时使用的可选变量,如果给定的输入组合有多个行,那么只保留第一行,如果省略,将使用所有变量。参数 .keep_all如果为真,将所有变量保存在.data中。如果参数...指定的组合不明显,这将保留第一行的值。

所有参数都取默认情况时:

dbeaver替换postgresql db2 replace替换多个_dbeaver替换postgresql_08

当参数...没有取值时,参数.keep_all的取值无影响。

当参数...取值时,实际上就是对这一值进行筛查:

dbeaver替换postgresql db2 replace替换多个_keil5函数 默认返回值_09

此时参数...取值为A,即对第一列进行筛查重复的情况,结果中只会出现A的不重复列。当参数.keep_all=T时,即需要将剩余的列也显示出来,此时结果类似于duplicated()的情况。

参数...也可以同时取值为多个,如:

dbeaver替换postgresql db2 replace替换多个_spark 数据框 删除列_10

以上三种删除重复项的函数都是比较常见的函数,只是distinct()函数需要安装dplyr包,并且也只适用于数据框的数据。具体需要哪种方式进行删除重复项还是根据实际情况自己进行使用。