如何转换二进制数据
1 0 1 1 0 0 0
0 1 0 1 0 1 1
1 1 1 0 1 0 1
以此格式提供数据:
1 0.95 2 0.32 3 0.89 4 0.97 5 0.11 6 0.20 7 0.31
1 0.11 2 0.92 3 0.34 4 0.94 5 0.21 6 0.90 7 0.81
1 0.97 2 0.82 3 0.89 4 0.17 5 0.96 6 0.13 7 0.91
这样: 每个值代表两位数:
1-整数表示其位置,
如果原始值= 1,则<{2>浮点值从0.70 to 0.99
随机给出,
如果原始值=零,则从0.10 to 0.39
我知道如何生成随机样本,即
x <- 1:7
y <- sample(seq(0.70, 0.99,by=0.01),length(x),replace=FALSE)
但我不知道如果X == 1从0.70 to 0.99
生成随机样本值,如何告诉R,否则会从0.10 to 0.39
生成随机样本值
答案 0 :(得分:3)
让mm
成为您的样本输入矩阵
mm <- matrix(c(1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
0, 1, 0, 1), ncol=7)
您可以使用
生成正确的整数序列idx <- col(mm)
您可以使用ifelse()
val <- ifelse(mm==1,
runif(length(mm), .7, .99),
runif(length(mm), .1, .39))
从技术上讲,我们确实生成了一些我们不会使用的数字,但它通常足够快以至于没有问题。最后,我们可以将它们与结合起来
matrix(rbind(idx, val), nrow=3)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
# [1,] 1 0.734 2 0.707 3 0.214 4 0.246 5 0.822 6 0.919 7 0.887
# [2,] 1 0.150 2 0.353 3 0.332 4 0.724 5 0.768 6 0.936 7 0.304
# [3,] 1 0.708 2 0.321 3 0.790 4 0.193 5 0.808 6 0.224 7 0.872
答案 1 :(得分:1)
您可以使用ifelse
有条件地选择runif范围:
set.seed(144)
t(apply(dat, 1, function(x) rbind(seq(length(x)),
ifelse(x == 1, runif(length(x), 0.7, 0.99),
runif(length(x), 0.1, 0.39)))))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
# [1,] 1 0.7143302 2 0.1225158 3 0.9107380 4 0.8452873 5 0.1519741 6
# [2,] 1 0.1081755 2 0.7156656 3 0.2653289 4 0.8529043 5 0.3622948 6
# [3,] 1 0.8798000 2 0.7516552 3 0.8467378 4 0.2338804 5 0.7888522 6
# [,12] [,13] [,14]
# [1,] 0.2599710 7 0.1423132
# [2,] 0.8107819 7 0.7807105
# [3,] 0.3009073 7 0.7231688
ifelse
语句在使用两个不同范围绘制的runif
个向量之间进行选择,rbind
对索引和随机数进行交错。