Пометить строки на основе условий в 2 столбцах - PullRequest
0 голосов
/ 30 октября 2019

У меня есть данные, как показано ниже

    concat         Type   ddate      TTIME
1348 - 2019-06-10   B   6/10/2019   12:34:03
1348 - 2019-06-10   A   6/10/2019   12:38:02
1348 - 2019-06-10   B   6/10/2019   13:37:15
1348 - 2019-06-11   A   6/11/2019   14:35:20
1348 - 2019-06-11   B   6/11/2019   18:01:01
1348 - 2019-06-11   A   6/11/2019   18:02:42
1348 - 2019-06-11   B   6/11/2019   19:59:34

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

       concat      Type   ddate       TTIME    Category
1348 - 2019-06-10   B   6/10/2019   12:34:03    Exclude
1348 - 2019-06-10   A   6/10/2019   12:38:02    Exclude
1348 - 2019-06-10   B   6/10/2019   13:37:15    Exclude
1348 - 2019-06-11   A   6/11/2019   14:35:20    Include
1348 - 2019-06-11   B   6/11/2019   18:01:01    Include
1348 - 2019-06-11   A   6/11/2019   18:02:42    Include
1348 - 2019-06-11   B   6/11/2019   19:59:34    Include

Я пробовал, как показано ниже, но не смог сгенерировать желаемый результат

df1 = df1 %>% 
arrange(concat, time) %>% 
group_by(concat) %>% 
mutate(
 Category = ifelse((TTIME == min(TTIME) & Type =="A") & (TTIME == max(TTIME) & Type =="B"),"Include","Exclude"))

1 Ответ

0 голосов
/ 30 октября 2019

Я бы рассмотрел разделение этих условий, чтобы было легче работать с ними.

Чтобы проиллюстрировать пример, вы можете перекодировать строки, где min для TTIME с Type == "A" (и аналогично для max и Type == "B").

Затем,для включения в группу группа должна содержать как «A», так и «B».

Имеет ли это логику, которую вы искали?

library(tidyverse)

df1 %>% 
  arrange(concat, TTIME) %>% 
  group_by(concat) %>%
  mutate(match = case_when(
    TTIME == min(TTIME) & Type == "A" ~ "A",
    TTIME == max(TTIME) & Type == "B" ~ "B")) %>%
  mutate(Category = ifelse(all(c("A", "B") %in% match), "Include", "Exclude"))

# A tibble: 7 x 6
# Groups:   concat [2]
  concat          Type  ddate     TTIME               match Category
  <fct>           <fct> <fct>     <dttm>              <chr> <chr>   
1 1348-2019-06-10 B     6/10/2019 2019-10-30 12:34:03 NA    Exclude 
2 1348-2019-06-10 A     6/10/2019 2019-10-30 12:38:02 NA    Exclude 
3 1348-2019-06-10 B     6/10/2019 2019-10-30 13:37:15 B     Exclude 
4 1348-2019-06-11 A     6/11/2019 2019-10-30 14:35:20 A     Include 
5 1348-2019-06-11 B     6/11/2019 2019-10-30 18:01:01 NA    Include 
6 1348-2019-06-11 A     6/11/2019 2019-10-30 18:02:42 NA    Include 
7 1348-2019-06-11 B     6/11/2019 2019-10-30 19:59:34 B     Include 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...