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))
如何在 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))