Использование group_by для проверки значения ячейки, затем, если оно существует, добавление его ко всем ячейкам столбца в группе

Я пытаюсь выполнить довольно сложную функцию dplyr.

У меня есть набор данных строк и столбцов FEC. Это выглядит так:

    cov_end_dat tot_rec idfull       rep_typ                            

1   3/31/07 271972.12   H6WI070332008   Q1
2   6/30/07 303687.1    H6WI070332008   Q2
3   9/30/07 158947.03   H6WI070332008   Q3
4   12/31/07    174545.28   H6WI070332008   YE
5   3/31/08 267260.1    H6WI070332008   Q1
6   6/30/08 280075.62   H6WI070332008   Q2
7   8/20/08 58659.79    H6WI070332008   12P
8   9/30/08 114268.7    H6WI070332008   Q3
9   10/15/08    38125   H6WI070332008   12G
10  11/24/08    78178.97    H6WI070332008   30G
11  12/31/08    3448.67 H6WI070332008   YE

Для каждого кандидата есть идентификатор и "rep_type" (тип отчета).

Я пытаюсь выполнить следующую операцию. Для каждого кандидата (все имеют одинаковое значение IDFULL), я хочу посмотреть, есть ли значение Q1. Если есть, я хочу взять значение ячейки cov_end в этой строке и назначить ее всем ячейкам с одинаковым IDFULL в новом столбце с именем "Q1date". В противном случае я хочу назначить ему предварительно установленную дату.

То, как я пытался это сделать, выглядит примерно так:

data %>% group_by(idfull) %>% %>% mutate(Q1date = SOMEHOW LOOK INSIDE GROUP FOR VALUE?) %>% ungroup()

2 ответа

Решение

Вы можете просто сделать

data %>% group_by(idfull) %>% 
     mutate(Q1date=first(cov_end_dat[rep_typ=="Q1"]))

   cov_end_dat tot_rec idfull        rep_typ Q1date 
   <chr>         <dbl> <chr>         <chr>   <chr>  
 1 3/31/07     271972. H6WI070332008 Q1      3/31/07
 2 6/30/07     303687. H6WI070332008 Q2      3/31/07
 3 9/30/07     158947. H6WI070332008 Q3      3/31/07
 4 12/31/07    174545. H6WI070332008 YE      3/31/07
 5 3/31/08     267260. H6WI070332008 Q1      3/31/07
 6 6/30/08     280076. H6WI070332008 Q2      3/31/07
 7 8/20/08      58660. H6WI070332008 12P     3/31/07
 8 9/30/08     114269. H6WI070332008 Q3      3/31/07
 9 10/15/08     38125. H6WI070332008 12G     3/31/07
10 11/24/08     78179. H6WI070332008 30G     3/31/07
11 12/31/08      3449. H6WI070332008 YE      3/31/07

См. мой комментарий выше, но что-то вроде этого должно работать

   select(idfull, rep_typ, cov_end) %>%
filter(rep_typ == Q1) %>%
unique() %>%
select(-rep_typ) %>%
left_join(original_data, .)

Что-то вроде того?

Другие вопросы по тегам