Я совершенно новичок в dplyr и пытаюсь использовать dplyr для выполнения следующих действий:
У меня есть фрейм данных 'tdata' и я хочу заполнить пропущенные периоды (prd) с помощью 'NA' в каждой группе.Я хочу получить датафрейм «результаты».Для меня важна скорость, поэтому я надеюсь, что есть способ сделать это в dplyr быстрее, чем в цикле for.
> tdata <- data.frame(group = c(10, 10, 10, 11, 11), prd = c(1, 2, 5, 3, 5), value = c(2,7,3,6,2))
> tdata
group prd value
1 10 1 2
2 10 2 7
3 10 5 3
4 11 3 6
5 11 5 2
> result <- data.frame(group = c(10, 10, 10, 10, 10, 11, 11, 11), prd = c(1, 2, 3, 4, 5, 3, 4, 5), value = c(2, 7, 'NA', 'NA', 3, 6, 'NA', 2))
> result
group prd value
1 10 1 2
2 10 2 7
3 10 3 NA
4 10 4 NA
5 10 5 3
6 11 3 6
7 11 4 NA
8 11 5 2
Я попытался использовать каналы и получил эту ошибку:
> fdata <- tdata %>%
+ group_by(group) %>%
+ arrange(prd) %>%
+ left_join(data.frame(prd_v=min(prd):max(prd)), ., by=c("prd_v" = "prd"))
Error in data.frame(prd_v = min(prd):max(prd)) : object 'prd' not found
ОБНОВЛЕНИЕ: Кроме того, я хочу использовать этот канал внутри более крупной функции, поэтому я хотел бы иметь
period_variable <- "prd"
, а затем
tdata2 <- ndata %>%
group_by(group) %>%
complete(period_variable = full_seq(period_variable), period = 1) %>%
ungroup()
tdata2
Но это не работает.Я пытался поиграть с get (), parse (), eval (), as.name (), as.symbol (), UQ (), !!, sym (), но все равно не работает.