我有一个数据框,其中一列是这样的:
Minutes
1.432
12.345
4.556
1.324
0.657
6.558
我想在它旁边创建一个列,其中从数字中减去了整数。它看起来像这样:
Minutes
0.432
0.345
0.556
0.324
0.657
0.558
有没有办法在R代码中执行此操作?
答案 0 :(得分:2)
我们可以从整数版本中减去
with(df1, Minutes - as.integer(Minutes))
#[1] 0.432 0.345 0.556 0.324 0.657 0.558
library(microbenchmark)
v1 <- rep(df1$Minutes, 1e6)
microbenchmark(akrun = v1 - as.integer(v1), brittenb = v1 %%1, unit = 'relative')
#Unit: relative
# expr min lq mean median uq max neval
# akrun 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100
# brittenb 1.386245 1.392605 1.290523 1.317515 1.232846 1.437915 100
df1 <- data.frame(Minutes = c(1.432, 12.345, 4.556, 1.324, 0.657, 6.558))
答案 1 :(得分:2)
来自brittenb的评论非常好,只需使用modulo
R> test_df <- data.frame(Minutes = c(1.432, 12.345, 4.556, 1.324,
0.657, 6.558)
R> test_df$Minutes_modulo <- test_df$Minutes %% 1
R> test_df
Minutes Minutes_modulo
1 1.432 0.432
2 12.345 0.345
3 4.556 0.556
4 1.324 0.324
5 0.657 0.657
6 6.558 0.558
来自文档:
%%表示x mod y,%/%表示整数除法。保证x ==(x %% y)+ y *(x%/%y)(直到舍入误差),除非y == 0,其中%%的结果是NA_integer_或NaN(取决于typeof of参数)和非有限参数。