Это должно работать:
test = read.table(header = T,text="
Identifier Source 196001 200006 Unit
top HH 65 888 3
top2 BB 0111 9886 8") #I modified your values so you can see the divisions
test %>% mutate_at(vars(contains('2'), contains('1')), funs(./Unit))
По сути, вы говорите «выберите переменные, которые содержат 2, а также выберите переменные, которые содержат 1».
Если вы хотите выбрать переменные, которые содержат 1 и 2, это будет другой проблемой и может потребовать регулярное выражение (с dplyr::match
).
Кроме того, обратите внимание, что funs
мягко устарел, теперь вы должны использовать лямбда-функции:
test = test %>% mutate_at(vars(contains('2'), contains('1')), ~./Unit)