Как округлить числа фрейма данных в R, сохраняя сумму? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть следующий фрейм данных в 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
}

Как применить эту функцию к каждой строке набора данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...