删除R中具有重复值的所有行副本

时间:2016-02-19 14:35:05

标签: r

我的数据集如下所示:

name  position type
A       12      S
B       13      T
C       12      S
D       12      T
E       11      S
F       10      S

我想删除具有重复位置和类型的行。

我尝试使用duplicated函数查找重复的行,但我不知道如何删除带有重复值的所有行。

dup = db[duplicated(db[2:3]),]

我想删除具有相同位置和类型但名称不同的行。 我想要的输出是:

name  position type
B       13      T
D       12      T
E       11      S
F       10      S

2 个答案:

答案 0 :(得分:4)

duplicated仅从重复值开始返回TRUE。要返回所有重复的元素,我们可能需要反向应用duplicated,即从最后一个值到第一个值并使用OR条件,即|,否定和子集数据集。

db[!(duplicated(db[2:3])|duplicated(db[2:3], fromLast=TRUE)),]
#   name position type
# 2    B       13    T
# 4    D       12    T
# 5    E       11    S
# 6    F       10    S

答案 1 :(得分:1)

dplyr包使用直观易读的代码执行此操作。

以下是一个玩具示例,从-Dlog4j.configuration=file:///C:/[folderName]/apps/[appName]/config/log4j.properties 获取mtcarscyl没有重复值的行:

gear

cyl和gear的这两种组合是唯一独特的组合,您可以通过以下方式确认:

library(dplyr)
mtcars %>%
  group_by(cyl, gear) %>%
  filter(n() == 1) %>%
  ungroup()

Source: local data frame [2 x 11]

    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1  21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1
2  19.7     6 145.0   175  3.62 2.770 15.50     0     1     5     6