dplyr больше подходит для операций со столбцами, а не для операций со строками, подобных этим. Но это довольно просто сделать в базе R:
library(dplyr)
set.seed(111)
data <- tibble(ID = sort(sample(LETTERS, 10, F)),
A = round(rnorm(10, 4, 1), 1),
B = sample(0:20, 10, F),
C = rep(c(33, 9), each = 5))
ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05) # your mutliplier
ratio <- ratio[rep(1, nrow(data)),] # replicated to match size of 'data'
data[2:4] <- data[2:4] * ratio # multiply
ID A B C
<chr> <dbl> <dbl> <dbl>
1 A 2.87 0.25 1.65
2 B 1.75 2.5 1.65
3 H 2.10 2 1.65
4 I 2.17 4.5 1.65
5 K 2.45 1.5 1.65
6 L 2.66 2.75 0.45
7 P 2.52 5 0.45
8 S 4.06 4.75 0.45
9 V 3.08 4.25 0.45
10 X 3.36 2.25 0.45
В качестве альтернативы, вы можете избежать дублирования своего фрейма данных "пропорции" для соответствия размеру основного набора данных с помощью Map
:
ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05)
data[2:4] <- Map('*', data[2:4], ratio)