根据某些条件删除重复项

时间:2020-03-17 03:51:35

标签: r dplyr tidyr

我有两个数据集:D 1 和D 2 。 D 2 是D 1 和更大数据集(我称为D 3 )的左连接。尽管D 2 的键列具有与D 1 相同的唯一元素数,但它还是有一些重复项,我希望根据某些条件将其删除。

有两个问题:

1)除了键值外,有些行充满了NA值,这些行对我来说非常重要。

2)还有一些其他行可能会重复也可能不会重复,但与我的标准条件不匹配。

如何根据层次结构有条件地删除这些重复项?

样本数据集:

ID  Var
1   1
2   1
3   1
3   9
4   2
4   9
5   1
6   1
7   1
7   9
7   9
8   2
9  
10  1

期望的数据集:

ID  Var
1   1
2   1
3   1
4   2
5   1
6   1
7   1
8   2
9  
10  1

2 个答案:

答案 0 :(得分:0)

duplicated满足您的需求。

dat[!duplicated(dat$ID),]
#    ID Var
# 1   1   1
# 2   2   1
# 3   3   1
# 5   4   2
# 7   5   1
# 8   6   1
# 9   7   1
# 12  8   2
# 13  9  NA
# 14 10   1

tidyverse的一些东西也是如此

library(dplyr)
dat %>%
  group_by(ID) %>%
  slice(1) %>%
  ungroup()

还有data.table ...

library(data.table)
as.data.table(dat)[ !duplicated(ID), ]

数据:

dat <- read.table(header = TRUE, text = "
ID  Var
1   1
2   1
3   1
3   9
4   2
4   9
5   1
6   1
7   1
7   9
7   9
8   2
9   NA
10  1")

答案 1 :(得分:0)

说吧!我们在下面有一个data.table:

Library(data.table)
 df <- data.table(Name = c("JACK", "JOHN", "JACK", "ANNIE", "JOHN", "JACK"), 
                  Amount = c(30, 10, 20, 24, 5, 1))

在这种情况下,我按名称排序,因此它将类似于您的ID列。得到适当的订单后,我只会得到第一个结果

df[][order(Name, Amount)]
df[,.SD[1], by = Name]

输出:

    Name Amount
1:  JACK     30
2:  JOHN     10
3: ANNIE     24

希望对您有所帮助。