Суммы значений строк близки к 100, но простое округление не всегда дает 100, например, первый ряд.Итак, перед округлением давайте выполним масштабирование, которое изменяет сумму значений строки с 'close' до точно равного 100. Однако может возникнуть такая ситуация, что даже округление после масштабирования не даст сумму, равную 100, поэтому давайтеисправьте это, изменив значения одного из столбцов:
# additional value 100/3
B <- c(60.65, 25.25, 100/3)
D <- c(10, 10, 100/3)
E <- c(30.35, 65.75, 100/3)
Total <- c(100, 100, 100)
df <- round(data.frame(B, D, E)*100/rowSums(data.frame(B, D, E)))
df
# B D E
#1 60 10 30
#2 25 10 65
#3 33 33 33
rowSums(df)
#[1] 100 100 99
df[,3] <- 100 - rowSums(df[,1:2])
df
# B D E
#1 60 10 30
#2 25 10 65
#3 33 33 34
rowSums(df)
#[1] 100 100 100