Это должно сделать работу.
Во-первых, создайте диагональную матрицу m2
, где каждый элемент диагонали представляет собой разницу между 1 и суммой матрицы m1
m1 <- matrix(0.1, nrow = 3, ncol = 3, dimnames = list(c('a','b','c'), c('c1','c2','c3')))
m2 <- diag(1 - colSums(m1))
m2
#> [,1] [,2] [,3]
#> [1,] 0.7 0.0 0.0
#> [2,] 0.0 0.7 0.0
#> [3,] 0.0 0.0 0.7
Затем нам нужно добавить имена строк до m2
. Возможно, мы захотим выделить первые 3 буквы алфавита , а не , используемых для m1
. Преимущество этого состоит в том, что вам не нужно указывать имена строк новой матрицы - они будут распределяться на основе того, что еще не использовалось.
rownames(m2) <- letters[!letters %in% rownames(m1)][1:nrow(m2)]
rbind(m1, m2)
#> c1 c2 c3
#> a 0.1 0.1 0.1
#> b 0.1 0.1 0.1
#> c 0.1 0.1 0.1
#> d 0.7 0.0 0.0
#> e 0.0 0.7 0.0
#> f 0.0 0.0 0.7
Как видите, этот код по-прежнему работает с большим количеством строк / столбцов и различными числами в m1
:
m1 <- matrix(0.11, nrow = 3, ncol = 4, dimnames = list(c('a','b','c'), c('c1','c2','c3','c4')))
m1
#> c1 c2 c3 c4
#> a 0.11 0.11 0.11 0.11
#> b 0.11 0.11 0.11 0.11
#> c 0.11 0.11 0.11 0.11
m2 <- diag(1 - colSums(m1))
m2
#> [,1] [,2] [,3] [,4]
#> [1,] 0.67 0.00 0.00 0.00
#> [2,] 0.00 0.67 0.00 0.00
#> [3,] 0.00 0.00 0.67 0.00
#> [4,] 0.00 0.00 0.00 0.67
rownames(m2) <- letters[!letters %in% rownames(m1)][1:nrow(m2)]
rbind(m1, m2)
#> c1 c2 c3 c4
#> a 0.11 0.11 0.11 0.11
#> b 0.11 0.11 0.11 0.11
#> c 0.11 0.11 0.11 0.11
#> d 0.67 0.00 0.00 0.00
#> e 0.00 0.67 0.00 0.00
#> f 0.00 0.00 0.67 0.00
#> g 0.00 0.00 0.00 0.67
Создано в 2019-02-20 с помощью [ 118] представьте пакет (v0.2.1) sup>
Порядок сортировки индекса имеет значение только для индекса с несколькими столбцами. Для одного столбца Sql Sever может просто использовать индекс в обратном порядке, если он хочет DESC, где индекс - ASC.
Для поиска по нескольким столбцам сортировка индекса имеет значение. Скажем, у вас есть индекс:
field1, field2 desc
Это может быть полезно для этого запроса:
select field1, field2 from table order by field1, field2 desc
И для этого запроса, где индекс может использоваться в обратном порядке:
select field1, field2 from table order by field1 desc, field2
Но для этого запроса Sql Server потребует дополнительных в -сортировка памяти:
select field1, field2 from table order by field1, field2
Вот BOL по порядку сортировки индексации:
http://msdn.microsoft.com/en-us/library/ms181154.aspx
Должен помочь вам понять внутреннюю работу немного больше, а также синтаксис.
Определение правильного порядка сортировки может потенциально устранить необходимость в шаге сортировки в плане запроса, когда вы определяете порядок с помощью в инструкции select ,
Вы сортируете индекс по убыванию, когда разрабатываете этот индекс для запроса, который будет отсортирован по убыванию.
Зачастую самые свежие данные смещаются, поэтому, если вы отсортируете "по убыванию даты", вы оптимизируете этот вариант использования.
Я думаю, это будет иметь больше смысла для вещей. которые являются числовыми, а не буквенными.