如何四舍五入到R

时间:2019-04-21 14:46:57

标签: r dataframe dplyr rounding

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

换句话说,如果数字小于100,则应四舍五入为100,大于100的数字应四舍五入,如果小于50,则取整为最接近的整数。

让我们说我的数据框是

text_file = open(myfile, "r")
text_file[0]="Hi"

我尝试过:

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

但是只有第一部分有效,如果数字小于100,则将其设为100。我在做什么错?

3 个答案:

答案 0 :(得分:5)

检查它是否小于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 :(得分:1)

这是一种简单的方法: 首先除以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))

答案 2 :(得分:0)

round()函数具有digits参数,该参数指示要使用的小数位数。为了四舍五入,请使用digits = -2L。这样可以避免除以100,取整,乘以100

小于100的值需要特殊处理。因此,为了简洁起见,请使用G. Grothendieck's 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