The following solution using the ‹dplyr› and ‹tidyr› packages should do what you want:
df %>%
group_by(Protein2, Protein3, Protein4) %>%
nest() %>%
mutate(Biomarker1 = lapply(data, `[[`, 'Biomarker1'),
Biomarker1 = unlist(lapply(Biomarker1, paste, collapse = ', '))) %>%
ungroup() %>%
# Restore the “Beginning1” column is a bit of work, unfortunately.
mutate(Beginning1 = lapply(data, `[[`, 'Beginning1'),
Beginning1 = unlist(lapply(Beginning1, `[[`, 1))) %>%
select(-data)