Удаление повторяющихся строк в R на основе факторной переменной - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь удалить повторяющиеся строки, основываясь на наличии факторной переменной.Если переменная фактора в дублированной строке показывает требуемый , а не нежелательный , я хотел бы сохранить эту строку и удалить другую строку.Требуемый коэффициент иногда отображается как первый дубликат, а иногда как второй.

Кроме того, есть столбец, который начинает отсчет в течение тридцати дней, как только или желаемый или нежелательный всплывает.При отсутствии типа (NA) в столбце дублирующего флага также будет отображаться NA.

В конце должна быть 1 строка на бренд в день.

Выборка данных вhand:

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 голосов
/ 29 января 2019

Вот некоторые примеры данных.

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
0 голосов
/ 29 января 2019

Я предполагаю, что ваш фрейм данных "df"

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

Или

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