Заменить предыдущие значения последними с учетом некоторой группы

Я транспонировал и заполнил фрейм данных, который теперь выглядит так:

введите описание изображения здесь

Теперь я пытаюсь перезаписать все значения в столбцах Signal1 и Signal 2 в направлении вверх, группируя их одновременно по идентификатору и дате. Все предыдущие строки должны быть заполнены последним значением для данной группы. Результат должен выглядеть так:

введите описание изображения здесь

Я попытался решить проблему с помощью dplyr, но не знал, как с этим справиться:

df% ›% group_by (ID, Дата)%›% mutate (...)

Придется выполнить эту операцию на гораздо большем количестве столбцов (Signal1 - Signal 30), поэтому, надеюсь, доступно универсальное решение.


person Pavel Kaloferov    schedule 27.07.2020    source источник
comment
Пожалуйста, предоставьте данные вашего примера с использованием dput в ваших данных и копированием полученного текста / кода в свой вопрос, не используйте изображения для отображения данных   -  person starja    schedule 27.07.2020
comment
может это работает? df_new <- df %>% group_by(ID, Date) %>% arrange(Date) %>% mutate(across(starts_with("Signal"), last()))   -  person starja    schedule 27.07.2020
comment
@starja, что значительного из last(), вы можете объяснить, пожалуйста?   -  person linkonabe    schedule 28.07.2020
comment
@linkonabe Я там ошибся, должно быть только last. last возвращает последнее значение для каждого столбца (с учетом группирующей переменной), потому что @Pavel Kaloferov хочет заменить все значения в столбце group / Signal последним значением   -  person starja    schedule 28.07.2020


Ответы (1)


Это должно сделать это -

df %>%
  group_by(ID, Date) %>%
  mutate(
    Signal1 = last(Signal1),
    Signal2 = last(Signal2)
  ) %>%
  ungroup()

РЕДАКТИРОВАТЬ: не видел последней части вопроса. Комментарий @starja прямо по деньгам; для применения ко многим столбцам используйте -

df %>%
  group_by(ID, Date) %>%
  mutate(across(starts_with("Signal"), last)) %>%
  ungroup()
person Shree    schedule 27.07.2020