У меня есть следующий фрейм данных в R:
df <- structure(list(code = c(3500105, 3500105, 3500105, 3500105, 3500105, 3500105),
type = c("var11", "var21", "var22", "var23", "var24", "var31"),
adequate = c(6737.44433328298, 11620.2844916867, 11324.2844916867, 11246.4427150112, 11324.2844916867, 11228.5578085444),
inadequate = c(545.01978642828, 10.7155083133282, 10.7155083133282, 77.841776675461, 0, 95.7266831422943),
missing = c(4348.53588028873, NA, 296, 306.715508313328, 306.715508313328, 306.715508313328),
total = c(11631, 11631, 11631, 11631, 11631, 11631)),
row.names = c(NA, 6L),
class = "data.frame")
Перед экспортом этих данных я бы хотел округлить числа столбцов «адекватный», «неадекватный» и «отсутствующий». Проблема в том, что сумма округленных чисел для каждой строки должна быть равна сумме чисел перед их округлением (что равно столбцу «итого»).
Я нашел функцию, которая могла быпомогите мне с этой проблемой:
round preserve_sum <- function(x) {
y <- floor(x)
indices <- tail(order(x-y), round(sum(x)) - sum(y))
y[indices] <- y[indices] + 1
y
}
Как применить эту функцию к каждой строке набора данных?