首页 > 解决方案 > 如果变量具有重复值,则从数据框中删除组

问题描述

我想问一下是否有一种方法可以通过以下方式使用 dplyr (或其他方式)从数据框中删除组。假设我有一个按变量 1 分组的以下形式的数据框:

Variable 1   Variable 2
1            a
1            b     
2            a
2            a
2            b
3            a
3            c
3            a
...          ...

我只想删除变量 2 中具有两个连续相同值的组。即在上表中,它将删除第 2 组,因为有值 a、a、b,但没有组 c,其中 a、c、a。所以我会得到下面的桌子?

Variable 1   Variable 2
1            a
1            b     
3            a
3            c
3            a
...          ...

标签: rdataframedplyr

解决方案


要测试连续相同的值,您可以将一个值与该列中的前一个值进行比较。在dplyr中,这是可能的lag。(您可以使用 . 与下一个值进行比较来做同样的事情lead。结果是一样的。)

按 对数据进行分组variable1,得到 的lagvariable2然后将该组中这些重复项的数量相加。然后只过滤没有重复的组。之后,随意删除dupesInGroup列。

library(tidyverse)

df %>%
    group_by(variable1) %>%
    mutate(dupesInGroup = sum(variable2 == lag(variable2), na.rm = T)) %>%
    filter(dupesInGroup == 0)
#> # A tibble: 5 x 3
#> # Groups:   variable1 [2]
#>   variable1 variable2 dupesInGroup
#>       <int> <chr>            <int>
#> 1         1 a                    0
#> 2         1 b                    0
#> 3         3 a                    0
#> 4         3 c                    0
#> 5         3 a                    0

reprex 包(v0.2.0) 于 2018 年 5 月 10 日创建。


推荐阅读