Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将矩阵变换为只有唯一数R的矩阵_R_Matrix_Jitter - Fatal编程技术网

将矩阵变换为只有唯一数R的矩阵

将矩阵变换为只有唯一数R的矩阵,r,matrix,jitter,R,Matrix,Jitter,如何将矩阵更改为只有唯一数字的矩阵 我试过这个: dataset <- as.matrix(iris[,1:4]) head(dataset) Sepal.Length Sepal.Width Petal.Length Petal.Width [1,] 5.1 3.5 1.4 0.2 [2,] 4.9 3.0 1.4 0.2 [3,]

如何将矩阵更改为只有唯一数字的矩阵

我试过这个:

dataset <- as.matrix(iris[,1:4])

head(dataset)
     Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]          5.1         3.5          1.4         0.2
[2,]          4.9         3.0          1.4         0.2
[3,]          4.7         3.2          1.3         0.2
[4,]          4.6         3.1          1.5         0.2
[5,]          5.0         3.6          1.4         0.2
[6,]          5.4         3.9          1.7         0.4

datasetUnique <- jitter(dataset,factor = 0.001)

head(datasetUnique)
     Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]     5.100001    3.499998     1.399999   0.2000009
[2,]     4.900000    2.999999     1.399999   0.2000016
[3,]     4.700001    3.199999     1.300000   0.1999983
[4,]     4.600001    3.100002     1.500001   0.1999988
[5,]     4.999999    3.599999     1.399998   0.1999989
[6,]     5.399999    3.900000     1.699999   0.3999981

dataset可能不是最干净的方法,但您可以使用
sample
获得唯一的数字,然后将其除以一个大的数字以产生噪声,然后将其添加到矩阵中,即

mat <- matrix( c(1,2,2,3) , nrow = 2)  
mat + sample.int(5000, nrow(mat) * ncol(mat)) / 5000000

mat添加更多的小数,它们就会变得唯一

options(digits=10)

dataset <- as.matrix(iris[,1:4])
datasetUnique <- jitter(dataset,factor = 0.001)

> head(datasetUnique)
     Sepal.Length Sepal.Width Petal.Length  Petal.Width
[1,]  5.099982209 3.500005068  1.399988968 0.2000082396
[2,]  4.900019249 2.999988556  1.399985779 0.2000159874
[3,]  4.699981033 3.199993951  1.300013794 0.1999958768
[4,]  4.600000369 3.099985655  1.499996616 0.1999957113
[5,]  5.000014609 3.599997256  1.400002512 0.1999995772
[6,]  5.399992065 3.900010935  1.700003428 0.3999821202
选项(位数=10)

数据集它们可能是唯一的,但它们不会打印为唯一的,因为打印会截断/舍入值。因此,在数据集unqiue中,每个数字都是唯一的,即使所有初始数字都是相同的,并且有一个非常大的矩阵?矩阵(rep(1600),ncol=4,nrow=150),但不一定如此。如果你的矩阵足够大,一些数字就会重复。但是如果你使用22位小数,系数为0.001,那么矩阵一定非常大。我不确定你的目标是什么,但是如果你想要唯一的数字,你可以简单地检查所有的数字是否唯一,如果不是的话,再掷骰子。或者指定一个非常小的增量(第一个数字+0.0000001秒0.0000002),以防止不吉利的随机抽取。我在答案中加上这一点。
options(digits=10)

dataset          <- as.matrix(iris[,1:4])
increment_matrix <- matrix(seq( from = 0, to = 0.001, length.out =  ncol(dataset)* nrow(dataset) ) , ncol = ncol(dataset))
datasetUnique    <- dataset + increment_matrix