根据因子变量删除R中的重复行

时间:2019-01-29 16:29:29

标签: r filter dplyr duplicates distinct

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我假设您的数据框为“ df”

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

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