簡體   English   中英

R - 創建隨機數

[英]R - create random numbers

我有這樣的巨大數據框:

df <- read.table(text="
             id       date
1            1        2016-12-01 
2            2        2016-12-02 
3            4        2017-01-03 
4            6        2016-11-04 
5            7        2017-11-05 
6            9        2017-12-06", header=TRUE)

我為每個 id 隨機生成 1 或 0。 我正在用這個代碼來做。

set.seed(5)

df %>%
  arrange(id) %>% 
  mutate(
    rn = runif(id),
    discount = if_else(rn < 0.5, 0, 1)
  ) 

在我向數據框中添加新行之前,它可以完美運行。 然后是我的隨機數不同。

但我需要的不僅僅是為每個 id 生成隨機數,而且即使添加了新行,該數字也必須保持不變。

這意味着:

             id       date           discount
1            1        2016-12-01            1
2            2        2016-12-02            0
3            4        2017-01-03            0
4            6        2016-11-04            1
5            7        2017-11-05            1
6            9        2017-12-06            1

添加新行時

             id       date           discount
1            1        2016-12-01            1
2            2        2016-12-02            0
3            4        2017-01-03            0
4            6        2016-11-04            1
5            7        2017-11-05            1
6            9        2017-12-06            1
7            12       2017-12-06            0
8            13       2017-12-06            1

您需要在“新” data.frame “調用”之前重置相同的seed

set.seed(5) # first call
df %>%
  arrange(id) %>% 
  mutate(
    rn = runif(id),
    discount = if_else(rn < 0.5, 0, 1)
  ) 
#   id       date        rn discount
# 1  1 2016-12-01 0.2002145        0
# 2  2 2016-12-02 0.6852186        1
# 3  4 2017-01-03 0.9168758        1
# 4  6 2016-11-04 0.2843995        0
# 5  7 2017-11-05 0.1046501        0
# 6  9 2017-12-06 0.7010575        1


set.seed(5) # added two rows, reset the seed
df2 %>%
  arrange(id) %>% 
  mutate(
    rn = runif(id),
    discount = if_else(rn < 0.5, 0, 1)
  ) 
#   id       date        rn discount
# 1  1 2016-12-01 0.2002145        0
# 2  2 2016-12-02 0.6852186        1
# 3  4 2017-01-03 0.9168758        1
# 4  6 2016-11-04 0.2843995        0
# 5  7 2017-11-05 0.1046501        0
# 6  9 2017-12-06 0.7010575        1
# 7 12 2017-12-06 0.5279600        1
# 8 13 2017-12-06 0.8079352        1

數據:

df <- read.table(text="
             id       date
                 1            1        2016-12-01 
                 2            2        2016-12-02 
                 3            4        2017-01-03 
                 4            6        2016-11-04 
                 5            7        2017-11-05 
                 6            9        2017-12-06", header=TRUE)

df2 <- read.table(text="
             id       date
                 1            1        2016-12-01 
                 2            2        2016-12-02 
                 3            4        2017-01-03 
                 4            6        2016-11-04 
                 5            7        2017-11-05 
                 6            9        2017-12-06
                 7            12       2017-12-06
                 8            13       2017-12-06", header=TRUE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM