如果它们具有相同的值,请删除数据框中的组

时间:2019-06-27 19:37:16

标签: r dplyr

如果该组在“读取”列中具有相同的值,我想从数据框中删除该组。

我想按ID对数据帧进行分组,然后检查列读取中的每个值对于一个组是否相同。如果该组的所有值都相同,那么我要删除该组的所有行。

下面是一个包含三列的数据框。

library(dplyr)
df <- tibble(
  Date = c('2019/1/1', '2019/1/2', '2019/2/2', '2019/2/5', '2019/2/7'),
  ID = c('a', 'a', 'b', 'b', 'b'),
  Reading = c(1, 1, 2, 1, 1)
)
df$Date = as.Date(dfa$Date)
> df
# A tibble: 5 x 3
  Date       ID    Reading
  <date>     <chr> <dbl>
1 2019-01-01 a         1
2 2019-01-02 a         1
3 2019-02-02 b         2
4 2019-02-05 b         1
5 2019-02-07 b         1

我考虑过使用distinct来减少数据帧。

df %>% group_by(ID) %>% 
  distinct(Reading, .keep_all = TRUE) %>% 
  filter(n()>1) %>% 
  ungroup

# A tibble: 2 x 3
  Date       ID    Reading
  <date>     <chr>   <dbl>
1 2019-02-02 b           2
2 2019-02-05 b           1

但是,这也删除了列ID中b组的唯一值。

我想要的输出是

# A tibble: 3 x 3
  Date       ID    Reading
  <date>     <chr> <dbl>
1 2019-02-02 b         2
2 2019-02-05 b         1
3 2019-02-07 b         1

1 个答案:

答案 0 :(得分:2)

我们按“ ID”和filter进行分组,其中“读数”具有多个unique元素(n_distinct

library(dplyr)
df %>%
   group_by( ID) %>%
   filter(n_distinct(Reading) > 1)