【问题标题】:Removing duplicate rows in R based upon a factor variable根据因子变量删除 R 中的重复行
【发布时间】:2019-06-22 20:18:23
【问题描述】:

我正在尝试根据因子变量的存在来删除重复的行。如果重复行中的因子变量显示 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 有办法做到这一点,那就太好了。

谢谢!

【问题讨论】:

    标签: r filter dplyr duplicates distinct


    【解决方案1】:

    这里有一些可用的示例数据。

    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
    

    【讨论】:

      【解决方案2】:

      我假设你的数据框是“df”

      df %>% filter(type != "not desired" | is.na(type))
      

      或者

      df %>% select(-type) %>% distinct()
      

      【讨论】:

      • 这很接近,但有时我想保留“不想要的”,只要它不与“想要的”重复。
      • df %&gt;% group_by_at(vars(-type)) %&gt;% summarise(type = "desired")
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2021-05-13
      • 2016-09-16
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多