Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中四舍五入到下一个一百_R_Dataframe_Dplyr_Rounding - Fatal编程技术网

如何在R中四舍五入到下一个一百

如何在R中四舍五入到下一个一百,r,dataframe,dplyr,rounding,R,Dataframe,Dplyr,Rounding,我想把我df中的数字四舍五入到100,但是25、50或75应该是100,125应该是100,150或175应该是200。220应该是200,以此类推 换句话说,若数字小于100,则应四舍五入到100,若大于100的数字小于50,则应向下四舍五入,否则应向上取整到最近的houndred数字 假设我的数据帧是 df <- data.frame(replicate(1,sample(0:999,100,rep=TRUE))) colnames(df) <- c("data") 我

我想把我df中的数字四舍五入到100,但是25、50或75应该是100,125应该是100,150或175应该是200。220应该是200,以此类推

换句话说,若数字小于100,则应四舍五入到100,若大于100的数字小于50,则应向下四舍五入,否则应向上取整到最近的houndred数字

假设我的数据帧是

    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。我做错了什么

这里有一个简单的方法: 先除以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\u else:


检查是否小于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
round函数具有digits参数,该参数指示要使用的小数位数。为了四舍五入到下一个一百位数,请使用数字=-2L。这将避免被百除,四舍五入,乘以百

低于100的值需要特殊处理。因此,使用pmax方法具有简洁性

x <- seq(25, 225, 25)
x

你提到25和125都变成了100。当一个四舍五入发生时,边界是什么?为什么你的头衔说是50舍五入,而在你的问题中你是100舍五入?
pmax(100, 100 * round(x / 100))
## [1] 100 100 100 100 200 200 200
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