将矩阵更改为只有唯一数字 R 的矩阵
Chaning matrix into matrix with only unique numbers R
如何将矩阵更改为只有唯一数字的矩阵
我试过这个:
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
但这并不能使所有数字都独一无二。
我该如何实现?
可能不是最干净的方法,但您可以使用 sample
获取唯一数字,然后将其除以一个大数字以产生噪声,然后将其添加到您的矩阵中,即
mat <- matrix( c(1,2,2,3) , nrow = 2)
mat + sample.int(5000, nrow(mat) * ncol(mat)) / 5000000
确保根据您所需的准确度适当调整数字
添加更多的小数点,它们就会变得独一无二。
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
第二种可能性是使用非随机数来防止"bad luck"。
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
如何将矩阵更改为只有唯一数字的矩阵
我试过这个:
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
但这并不能使所有数字都独一无二。 我该如何实现?
可能不是最干净的方法,但您可以使用 sample
获取唯一数字,然后将其除以一个大数字以产生噪声,然后将其添加到您的矩阵中,即
mat <- matrix( c(1,2,2,3) , nrow = 2)
mat + sample.int(5000, nrow(mat) * ncol(mat)) / 5000000
确保根据您所需的准确度适当调整数字
添加更多的小数点,它们就会变得独一无二。
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
第二种可能性是使用非随机数来防止"bad luck"。
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