Использование 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, .)
Что-то вроде того?