首页 > 解决方案 > 根据因子变量删除 R 中的重复行

问题描述

我正在尝试根据因子变量的存在删除重复的行。如果重复行中的因子变量显示为desired,而不是not desired,我想保留该行并删除另一行。所需的因子有时会显示为第一个副本,有时会显示为第二个。

此外,一旦弹出想要或不想要一列,就会开始计算三十天。在没有类型 (NA) 的情况下,重复标志列也会显示 NA。

最后,每个品牌每天应该有 1 行。

手头的数据样本:

brand    date      sales orders customers   type        duplicate_flag
A     10/1/2018    100    5       4         NA                 NA
A     10/2/2018    150    8       6        desired             1
A     10/2/2018    150    8       6        not desired         1
A     10/3/2018    110    5       4          NA                2

期望的输出:

brand    date      sales orders customers   type        duplicate_flag
A     10/1/2018    100    5       4         NA                 NA
A     10/2/2018    150    8       6        desired             1
A     10/3/2018    110    5       4          NA                2

如果有办法在 dplyr 中做到这一点,那就太好了。

谢谢!

标签: rfilterdplyrduplicatesdistinct

解决方案


以下是一些可用的示例数据。

df <-
  data_frame(
    Date = c(1,2,2,3,3,4)
    , Metric = 1:6
    , type = c(NA, "desired", "not desired", "not desired", "desired", "not desired")
  )

看起来像:

# A tibble: 6 x 3
   Date Metric type       
  <dbl>  <int> <chr>      
1     1      1 <NA>       
2     2      2 desired    
3     2      3 not desired
4     3      4 not desired
5     3      5 desired    
6     4      6 not desired

我假设您希望根据列在每个日期保留一行type,但其他列可能(或可能不)彼此不同。(如果它们从不彼此不同,我不明白为什么保留哪一行很重要。)

为此,最简单的可能是按以下方式对数据进行排序type(确保您要保留的值排在第一位——type如果它不是按字母顺序排列的第一个级别,则您可能必须更改为以“所需”值作为第一级的因子出于某种原因)然后用于slice保留第一个条目。

df %>%
  arrange(type) %>%
  group_by(Date) %>%
  slice(1) %>%
  ungroup() %>%
  arrange(Date)

返回:

# A tibble: 4 x 3
   Date Metric type       
  <dbl>  <int> <chr>      
1     1      1 <NA>       
2     2      2 desired    
3     3      5 desired    
4     4      6 not desired

推荐阅读