使用R删除数字列中小数位前的所有数字

时间:2018-06-06 19:10:18

标签: r

我有一个数据框,其中一列是这样的:

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代码中执行此操作?

2 个答案:

答案 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参数)和非有限参数。