【问题标题】:Rounding numbers to the nearest decimal places in R在 R 中将数字四舍五入到最接近的小数位
【发布时间】:2023-02-05 01:32:13
【问题描述】:

考虑以下数据集:

df <- data.frame(id=1:10,
                 v1=c(2.35456185,1.44501001,2.98712312,0.12345123,0.96781234,
                      1.23934551,5.00212233,4.34120000,1.23443213,0.00112233))

我的意图是将 v1 中的值四舍五入到最接近的一位小数(10% 的观察值)、两位小数(40% 的观察值)和三位小数(50% 的观察值)随机地.我可以使用round() 函数将数字统一舍入到某些小数位。然而,就我而言,它并不统一。

需要的输出示例(当然我的不是随机的):

id   v1
 1   2.3
 2   1.45
 3   2.99
 4   0.12
 5   0.97 
 6   1.239
 7   5.002
 8   4.341
 9   1.234
10   0.001 

【问题讨论】:

    标签: r decimal rounding


    【解决方案1】:

    我们可能会根据probbablity创建一个sample的分组,然后根据分组的值创建roundv1

    library(dplyr)
    df %>%
      group_by(grp = sample(1:3, size = n(), replace = TRUE,
         prob = c(0.10, 0.4, 0.5))) %>% 
      mutate(v1 = round(v1, first(grp))) %>%
      ungroup %>% 
      select(-grp)
    

    -输出

    # A tibble: 10 × 2
          id    v1
       <int> <dbl>
     1     1 2.36 
     2     2 1.44 
     3     3 2.99 
     4     4 0.123
     5     5 0.97 
     6     6 1.24 
     7     7 5.00 
     8     8 4.3  
     9     9 1.23 
    10    10 0    
    

    或者我们直接在rounddigits参数中传递sampled输出

    df$v1 <- with(df, round(v1, sample(1:3, size = nrow(df), 
        replace = TRUE, prob = c(0.10, 0.4, 0.5))))
    

    【讨论】:

      【解决方案2】:

      您可以使用 round() ,其中 n 是“.”之后的位数。你想显示:

      v1=round(c, digits = n)
      

      或者使用 signif() ,其中 n 是总位数

      v1=signif(c, digits = n)
      

      【讨论】:

      • 感谢您的答复。实际上,我的问题有点不同。
      猜你喜欢
      • 2013-08-31
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多