仅从特定列/行中删除重复项

时间:2016-09-09 14:21:52

标签: r duplicates

我有一个包含大量重复TIME和AIR数据条目的数据集。我需要删除包含这些条目的所有行。这本身就非常简单:

DATE <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3) 
    #Supposed to be 4 entries per date; day 1 has 1 entry too many, day 2 has 2 entries too many
TIME <- c(0,3,3,6,9,0,0,3,6,9,9,0,3,6,9) 
    #Samples are taken every 3 hours from 0-9 each day
AIR <- c(1.1, 1.2, 1.2, 1.3, 1.4, 1.1, 1.1, 1.2, 1.3, 1.4, 1.4, 1.1, 1.2, 1.3, 1.4)

DF <- data.frame(DATE, TIME, AIR)

DF1 <- DF[!(duplicated(DF$TIME) & duplicated(DF$AIR)),]

DF1将输出以下内容:

  DATE TIME AIR
1    1    0 1.1
2    1    3 1.2
4    1    6 1.3
5    1    9 1.4

但是,我需要单独考虑每天或DATE,我实际需要的输出是:

DATE TIME AIR
1   0   1.1
1   3   1.2
1   6   1.3
1   9   1.4
2   0   1.1
2   3   1.2
2   6   1.3
2   9   1.4
3   0   1.1
3   3   1.2
3   6   1.3
3   9   1.4

在这种情况下,复制将在每个给定日期停止。我认为它会像稍微调整我的代码一样简单,但事实证明它不是,我尝试了许多变体:DF2 <- DF[!(duplicated(DF$TIME) & duplicated(DF$AIR)) & duplicated(DF$DATE),]无济于事。因此,它可能需要稍微复杂一点的东西 - 或至少超出我目前的手段。任何人都可以建议我需要做什么才能以这种方式单独考虑每一天?非常感谢你!

请注意,实际上可能是TIME重复但AIR不重复;这就是为什么我只需删除TIMEAIR重复的条目。

1 个答案:

答案 0 :(得分:1)

您需要分组,即(使用dplyr

library(dplyr)
DF %>% 
  group_by(DATE) %>% 
  filter(!(duplicated(TIME) & duplicated(AIR))