[英]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.