我想在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。我在做什么错?
答案 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