【问题标题】:Generate random numbers less then column values生成小于列值的随机数
【发布时间】:2020-08-08 05:54:37
【问题描述】:

有没有办法填充小于另一列中的值的随机数

例子

df
ColA
12
324
45
546

预期输出(ColB 应小于 COlA 中的值)

df
ColA     ColB
12        10
324       150
45         20
546        400

【问题讨论】:

    标签: r


    【解决方案1】:

    矢量化的基础 R 解决方案可能正在使用 runif,即,

    df <- within(df,ColB <- trunc(runif(nrow(df))*ColA))
    

    示例

    set.seed(1)
    df <- within(df,ColB <- trunc(runif(nrow(df))*ColA))
    
    > df
      ColA ColB
    1   12    3
    2  324  120
    3   45   25
    4  546  495
    

    【讨论】:

      【解决方案2】:

      一个dplyr 选项可以是:

      set.seed(123)
      
      df %>%
       rowwise() %>%
       mutate(ColB = sample(1:ColA, 1))
      
         ColA  ColB
        <int> <int>
      1    12     4
      2   324   256
      3    45    19
      4   546   483
      

      【讨论】:

        【解决方案3】:

        我们可以使用map

        library(dplyr)
        library(purrr)
        df %>%
           mutate(ColB = map_int(ColA, ~ sample(seq_len(.x), 1)))
        

        【讨论】:

          猜你喜欢
          • 2012-01-20
          • 2014-12-27
          • 1970-01-01
          • 1970-01-01
          • 2022-11-21
          • 1970-01-01
          • 2021-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多