Мы можем использовать first
от dplyr
library(dplyr)
df %>%
group_by(weekday) %>%
mutate(val2 = first(val))
Предполагая, что «дата» не упорядочена, используйте which.min
df %>%
group_by(weekday) %>%
mutate(val2 = val[which.min(date)])
Или arrange
по 'дате' и 'дням недели' (что будет дороже)
df %>%
arrange(weekday, date) %>%
group_by(weekday) %>%
mutate(val2 = first(val))