Мы могли бы использовать replace
и указать list
с индексом, который мы хотим заменить, и, так как это замена нескольких столбцов, используйте mutate_at
library(dplyr)
df1 %>%
mutate_at(vars(cal, cal3), funs(replace(., 1:3, '-')))
# Type cal cal2 cal3 cal4
#1 PER-11 - 148 - 198
#2 PER-12 - 148 - 198
#3 PER-13 - 148 - 198
#4 PER-14 125 148 177 198
#5 PER-15 125 148 177 198
#6 PER-16 125 148 177 198