问题描述
id shift_back shift_forward
<chr> <dbl> <dbl>
1 11 -140 0
2 12 -63 149
3 13 -37 327
4 14 0 193
5 16 -30 30
6 17 -30 30
7 18 -30 30
8 19 -30 30
我想用这些列shift_back
和shift_forward
作为范围间隔来生成一个随机数。
但是,我不希望随机数为0
。
下面的代码可以正常工作,但也可以包含0
mutate(shift = base::sample(seq(shift_back,shift_forward,by = 1),1))
但是,这会产生如下所示的输出,也可以将0
作为移位值
如何生成一个在该范围内但不包括0(从间隔中)的随机数。基本上,我不希望shift值为0(零)。
解决方法
您可以在采样前排除零。
library(dplyr)
df %>%
rowwise() %>%
mutate(shift = seq(shift_back,shift_forward) %>% .[. != 0] %>% sample(1))
,
library(tidyverse)
df <- tibble(
id = 11:14,shift_back = c(-140,-63,-37,0),shift_forward = c(0,149,327,193)
)
df %>%
rowwise() %>%
mutate(shift = list(seq(shift_back,shift_forward,by = 1)),shift = list(shift[shift != 0]),shift = sample(shift,1))