如何在R

时间:2018-07-17 11:48:16

标签: r

我想在特定间隔内生成正负数序列。例如,我想在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

有什么帮助吗?

1 个答案:

答案 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为止。我可能会这样做,以避免污染分配假设。