您可以使用ifelse() 来检查Change (abs()) 的绝对值是否低于1:
df$Change <- ifelse(abs(df$Change) < 1, df$Change * 100, df$Change)
df
#> Person Change
#> 1 1 10
#> 2 2 50
#> 3 3 -25
#> 4 4 5
#> 5 5 -20
或者使用条件作为索引:
df_condition = abs(df$Change) < 1
df$Change[df_condition] <- df$Change[df_condition] * 100
df
#> Person Change
#> 1 1 10
#> 2 2 50
#> 3 3 -25
#> 4 4 5
#> 5 5 -20
或者使用replace():
df_condition = abs(df$Change) < 1
df$Change <- replace(df$Change, df_condition, df$Change[df_condition] * 100)
df
#> Person Change
#> 1 1 10
#> 2 2 50
#> 3 3 -25
#> 4 4 5
#> 5 5 -20
基准测试
似乎条件是最快的解决方案,然后是replace(),然后是ifelse():
Unit: microseconds
expr min lq mean median uq max neval
ifelse 25.9 28.7 29.9806 29.60 30.7 67.2 1000
condition 20.6 22.7 23.7826 23.60 24.5 48.6 1000
replace 21.3 23.5 24.7224 24.35 25.3 129.4 1000
数据
df <- structure(list(Person = 1:5, Change = c(10, 0.5, -0.25, 5, -20
)), class = "data.frame", row.names = c(NA, -5L))