从间隔中提取值的样本

时间:2016-08-18 10:09:49

标签: r

我有一个包含30个值的数据集。数据例如:

value <- c(3.00, 3.30, 5.10, 2.09, 7.04,
   1.07, 7.33, 2.15, 3.27, 3.94, 3.07, 3.46, 5.45, 2.99, 7.89,
   1.67, 5.33, 2.56, 3.45, 3.76, 3.20, 3.50, 3.10, 2.67, 4.04,
   4.07, 3.33, 3.15, 2.27, 3.90) 

data <- data.frame(value)

使用分位数我可以选择百分比25%,50%,75%之间的值。

例如:

data$value <- data$value[data$value>=quantile(data$value)[4]]
newvalue <- data$value[data$value>=quantile(data$value)[4]]
data$value <- sample(newvalue, dim(data)[1], replace=T)

我想提取某个范围内的随机值,值“大于3且小于3.94”。

然后我想用这些随机值(&gt; 3和&lt; 3.94)替换列“值”(30行)。

预期结果如下:

value <- c(3.00, 3.30, 3.76, 3.20, 3.10,
   3.00, 3.46, 3.76, 3.27, 3.94, 3.07, 3.46, 3.76, 3.46, 3.90,
   3.30, 3.33, 3.94, 3.45, 3.76, 3.20, 3.50, 3.10, 3.20, 3.10,
   3.15, 3.33, 3.15, 3.00, 3.90)

如何做到最好?

谢谢!

1 个答案:

答案 0 :(得分:1)

如何从3.00到3.94生成seq数字,然后从中随机选择30

sample(seq(3.00, 3.94, 0.01), nrow(data))

#[1] 3.01 3.80 3.65 3.84 3.05 3.25 3.49 3.68 3.27 3.24 3.03 3.28 3.42 3.30 3.82 
#[16] 3.39 3.67 3.71 3.78 3.72 3.02 3.23 3.64 3.10 3.48 3.34 3.09 3.38 3.74 3.93

<强>更新

如果要从数据集中选择它,可以尝试

sample(data[data$value > 3.0 & data$value < 3.94, "value"],nrow(data), replace = T)
#[1] 3.46 3.15 3.76 3.50 3.30 3.30 3.20 3.30 3.27 3.07 3.46 3.46 3.30 3.15 3.46 
#[16] 3.27 3.45 3.46 3.27 3.76 3.45 3.27 3.45 3.90 3.76 3.10 3.45 3.10 3.10 3.33