我想在特定间隔内生成正负数序列。例如,我想在10
中生成[0.2,-0.9]
个数字而没有零。这是我的尝试:
x <- sample(0.5:-0.9, 20, replace=T)
x
[1] 0.5 0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 0.5 0.5 0.5 -0.5 0.5
[16] -0.5 0.5 0.5 0.5 -0.5
x <- sample(0.2:-0.9, 20, replace=T)
x
[1] 0.2 -0.8 0.2 -0.8 -0.8 -0.8 -0.8 -0.8 -0.8 0.2 -0.8 -0.8 -0.8 0.2 -0.8
[16] -0.8 -0.8 -0.8 -0.8 -0.8
x <- seq(0.2, -0.9)
x
[1] 0.2 -0.8
我所有的尝试都没有给我我想要的东西。预期的输出例如是
0.2, -0.25, 0.3, 0.4, -0.5, 0.5, -0.9, -0.6, 0.7, 0.6
有什么帮助吗?
答案 0 :(得分:2)
下面的答案在末尾添加了新要求(大约没有0)。
您需要seq
并按正确的顺序排列数字:
sample(seq(0.2,from=-0.9,by=.1), 10, replace=T)
[1] -0.1 -0.6 0.2 0.0 0.0 0.1 0.2 -0.8 -0.7 -0.2
我推荐sample_n
:
library(dplyr)
sample_n(as_tibble(seq(0.2,from=-0.9,by=.1)), 10, replace=T)
value <dbl> 1 0.100 2 -0.200 3 0. 4 -0.100 5 0. 6 -0.100 7 -0.600 8 -0.800 9 -0.900 10 -0.900
更新:
您提到您不希望0。有许多方法可以实现此目的。最好的方法可能取决于对您而言很重要的一组统计含义。以下是一些示例:
示例1
x <- sample(seq(0.2,from=-0.9,by=.1), 10, replace=T)
ifelse(x==0, sample(seq(-.1,from=-0.9,by=.1), 1, replace=T), x)
示例2
c(sample(seq(-.1,from=-0.9,by=.1), 5, replace=T),
sample(seq(.1, 0.2,by=.1), 5, replace=T))
您也可以使用while
。基本上,对于每个元素,您都会随机抽样,直到有一个不是== 0
为止。我可能会这样做,以避免污染分配假设。