Как округлить до следующей сотни в R - PullRequest
0 голосов
/ 21 апреля 2019

Я хотел бы округлить мои числа в моем df на 100, но 25, 50 или 75 должно быть 100, 125 должно быть 100, 150 или 175 должно быть 200. 220 должно быть 200 и т. Д.

Другими словами, если число меньше 100, то оно должно быть округлено до 100, большее число, чем 100, должно быть округлено вниз, если они меньше 50, в противном случае до ближайшего преследованного числа.

Позволяет сказатьчто мой фрейм данных

    df <- data.frame(replicate(1,sample(0:999,100,rep=TRUE)))
colnames(df) <- c("data")

Я пробовал это:

result <- df %>% 
  mutate(
    data = round(if_else(data <= 100, 100, as.numeric(data)), 100)
  )

Но работает только первая часть, если число меньше 100, сделайте его равным 100. Что я делаю не так?

Ответы [ 3 ]

5 голосов
/ 21 апреля 2019

Проверьте, если оно меньше 100, а затем используйте 100 или еще раз:

x <- c(25, 50, 75, 125, 150, 175, 220)
ifelse(x < 100, 100, 100 * round(x / 100))
## [1] 100 100 100 100 200 200 200

Этот вариант также работает:

pmax(100, 100 * round(x / 100))
## [1] 100 100 100 100 200 200 200
1 голос
/ 21 апреля 2019

вот простой способ сделать это: сначала разделите на 100, затем округлите, а затем умножьте на 100:

set.seed(1)
data.frame(data = sample(0:999, 10)) %>% 
  mutate(rounded_data = round(data /100) * 100)

       data rounded_data
1   265          300
2   371          400
3   571          600
4   905          900
5   200          200
6   893          900
7   939          900
8   656          700
9   624          600
10   61          100

Если вы хотите округлить только, когда число больше 100, вы можете использовать if_else:

 set.seed(1)
    data.frame(data = sample(0:999, 10)) %>% 
      mutate(rounded_data = if_else(data < 100, 100, round(data /100) * 100))
0 голосов
/ 22 апреля 2019

Функция round() имеет параметр digits, который указывает количество используемых десятичных разрядов.Для округления до следующей сотни используйте digits = -2L.Это позволит избежать деления на сто, округления, умножения на сто .

Для значений ниже 100 требуется специальная обработка. Таким образом, используя G. pmax() подход Гротендика для его краткости

x <- seq(25, 225, 25)
x
[1]  25  50  75 100 125 150 175 200 225
pmax(100, round(x, -2L))
[1] 100 100 100 100 100 200 200 200 200
...