删除重复项,dplyr删除非重复行。

时间:2017-10-26 02:00:51

标签: r dplyr

我尝试向数据框添加行,然后检查/删除数据框的单个列中具有重复值的行。如果提供了新的值,最终目标是在数据帧中基本上覆盖一行。我还没有弄清楚如何使用dplyr动态指定rownames(或者实际上使用R),所以我这样做。

我从测试数据框开始,并使用dplyr删除列位置重复的第一组行,如下所示:

testData.df <- testData.df %>%
  filter(duplicated(Position))
testData.df
# A tibble: 0 x 4
# ... with 4 variables: Position <chr>, rep <chr>, name <chr>, status <chr>

这正如我所料。当我再次运行相同的过滤器时,我得到了这个:

{{1}}

为什么它会删除不重复的行?第一次运行它意味着它按预期工作,即它删除了实际的重复项。我不知道第二次解释行为上的差异。

1 个答案:

答案 0 :(得分:0)

您希望filter(duplicated(...))保留不重复的行,但它实际上正好相反。如果我们将row_numbers添加到每一行

,您就会看到这一点
testData.df<-data_frame(Position=c("B1","B2","B3","B1","B2","B3"), rep=c("B1","B2","B3","B4","B5","B6"),name=c(rep("wibble",each=6)),status=c(rep("unknown", each=6))) %>%
               mutate(rn = row_number())
testData.df <- testData.df %>%
                  filter(duplicated(Position))

输出

# A tibble: 3 x 5
  Position   rep   name  status    rn
     <chr> <chr>  <chr>   <chr> <int>
1       B1    B4 wibble unknown     4
2       B2    B5 wibble unknown     5
3       B3    B6 wibble unknown     6

您应该使用filter(!duplicated(...))

被修改

尝试这样做,以便第一次保留重复的行,但不会第二次丢失

testData.df<-data_frame(Position=c("B1","B2","B3","B1","B2","B3"), rep=c("B1","B2","B3","B4","B5","B6"),name=c(rep("wibble",each=6)),status=c(rep("unknown", each=6))) %>%
                mutate(rn = row_number())

run1 <- testData.df %>%
        group_by(Position) %>%
        slice(n()) %>%
            ungroup()

run2 <- run1 %>%
        group_by(Position) %>%
        slice(n()) %>%
            ungroup()

# A tibble: 3 x 5
# Groups:   Position [3]
  Position   rep   name  status    rn
     <chr> <chr>  <chr>   <chr> <int>
1       B1    B4 wibble unknown     4
2       B2    B5 wibble unknown     5
3       B3    B6 wibble unknown     6