R中有条件地舍入数字

Round conditionally numbers in R

如何在 R 中有条件地舍入数据框中列的值?我需要从 0-89 而不是从 90-100 舍入到较低的 10。例如:

ID    value
A     15
B     47
C     91
D     92

必须改为

ID    value
A     10
B     40
C     91
D     92

因此,C/D 和 A/B 没有变化,四舍五入

有什么想法吗?

谢谢

你可以这样做:

df$value[df$value < 90] <- floor(df$value[df$value < 90] / 10) * 10

# ID value
# 1  A    10
# 2  B    40
# 3  C    91
# 4  D    92

提醒一下,这是您的数据:

df <- structure(list(ID = c("A", "B", "C", "D"), value = c(15L, 47L, 
91L, 92L)), .Names = c("ID", "value"), class = "data.frame", row.names = c(NA, 
-4L))

使用data.table的其他解决方案:

library(data.table)
setDT(df)[, value:= as.numeric(value)][value<90, value:= floor(value/10) * 10]

# ID value
# 1:  A    10
# 2:  B    40
# 3:  C    91
# 4:  D    92

你可以这样做:

df$value <- with(df, ifelse(value %in% c(0:89), value-(value%%10), value))