Просто выполните следующую функцию:
function insert(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}
, а затем используйте ее так:
alert(insert("foo baz", 4, "bar "));
Выход: foo bar baz
Он ведет себя точно так же, как C # (Sharp) String.Insert (int startIndex, строковое значение).
ПРИМЕЧАНИЕ. Эта функция вставки вставляет строковое значение (третий параметр) до указанного целочисленного индекса (второго параметра) в string str (первый параметр), а затем возвращает новую строку без изменения str!
Кажется, что это объясняет это.
Определение
order
состоит в том, чтоa[order(a)]
находится в порядке возрастания. Это работает с вашим примером, где правильный порядок - это четвертый, второй, первый, затем третий элемент.Возможно, вы искали
rank
, который возвращает ранг элементовR> a <- c(4.1, 3.2, 6.1, 3.1)
R> order(a)
[1] 4 2 1 3
R> rank(a)
[1] 3 2 4 1
, поэтомуrank
сообщает вам, в каком порядке находятся числа,order
сообщает вам, как получить их в порядке возрастания.
plot(a, rank(a)/length(a))
даст график CDF. Чтобы понять, почемуorder
полезен, попробуйтеplot(a, rank(a)/length(a),type="S")
, который дает беспорядок, потому что данные не в порядке возрастанияЕсли вы сделали
blockquote>oo<-order(a)
plot(a[oo],rank(a[oo])/length(a),type="S")
или простоoo<-order(a)
plot(a[oo],(1:length(a))/length(a)),type="S")
вы получите линейный график CDF.Готов поспорить, вы думаете о ранге.
Запуск этого небольшого фрагмента кода позволил мне понять функцию порядка
x <- c(3, 22, 5, 1, 77)
cbind(
index=1:length(x),
rank=rank(x),
x,
order=order(x),
sort=sort(x)
)
index rank x order sort
[1,] 1 2 3 4 1
[2,] 2 4 22 1 3
[3,] 3 3 5 3 5
[4,] 4 1 1 2 22
[5,] 5 5 77 5 77
Ссылка: http://r.789695.n4.nabble.com/I-don-t -understand-the-order-function-td4664384.html
x
в cbind()
.
– Rich Scriven
23 September 2016 в 21:51
Чтобы отсортировать вектор 1D или один столбец данных, просто вызовите функцию sort и передайте в свою последовательность.
С другой стороны, порядок Функция необходима для сортировки данных двух -мерных данных, т. е. нескольких столбцов данных, собранных в матрице или фрейме.
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
Вот выдержка данных для попыток полевых целей в сезоне NFL 2008 года, DataFrame, который я назвал 'fg'. предположим, что эти 10 точек данных представляют собой все цели поля, предпринятые в 2008 году; далее предположим, что вы хотите знать расстояние до самой длинной цели поля, предпринятой в этом году, кто ее ударил, и хорошо это или нет; вы также хотите знать второй, самый длинный, а также третий самый длинный и т. д .; и, наконец, вам нужна самая короткая попытка цели поля.
Ну, вы могли бы просто сделать это:
sort(fg$Dist, decreasing=T)
, который возвращает: 50 48 43 37 34 32 26 25 25 20
Это правильно, но не очень полезно - это говорит нам о расстоянии самой длинной попытки цели поля, второй по длине, ... и кратчайшей; однако, это все, что мы знаем - например, мы не знаем, кем был кикер, была ли попытка успешной и т. д. Конечно, нам нужен весь фрейм данных, отсортированный по столбцу «Dist» (иначе говоря, мы хотите отсортировать все строки данных по одному атрибуту Dist , который будет выглядеть следующим образом:
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
Это то, что делает порядок . Это «сортировка» для двумерных данных; иначе говоря, он возвращает 1D целочисленный индекс, состоящий из чисел строк, таких как сортировка строк по этому вектору, даст вам правильный сортировочный вид по столбцу, Dist
Вот как это работает. Выше, sort использовался для сортировки столбца Dist, для сортировки всего кадра данных в столбце Dist мы используем ' order ' точно так же, как «sort» используется выше :
ndx = order(fg$Dist, decreasing=T)
(я обычно привязываю массив, возвращенный из «порядка», к переменной «ndx», которая означает «index», потому что я собираюсь использовать его как индексный массив для сортировки.)
, который был шагом 1, здесь ' s шаг 2:
'ndx', то, что возвращается 'sort', затем используется в качестве массива индексов для повторного упорядочивания dataframe, 'fg':
fg_sorted = fg[ndx,]
fg_sorted - это переупорядоченный блок данных сразу же.
В сумме 'sort' используется для создания массива индексов (который определяет порядок сортировки столбца, который вы хотите отсортировать), который затем используется как индексный массив, чтобы повторно заказать фрейм данных (или матрицу).
(я думал, что было бы полезно изложить идеи очень просто здесь, чтобы обобщить хороший материал, отправленный @doug, и связанный с @duffymo; +1 к каждому, кстати.)
? order сообщает вам, какой элемент исходного вектора нужно поместить первым, вторым и т. д., чтобы отсортировать исходный вектор, тогда как ? rank сообщите, какой элемент имеет самое низкое, второе низкое и т. д. значение. Например:
> a <- c(45, 50, 10, 96)
> order(a)
[1] 3 1 2 4
> rank(a)
[1] 2 3 1 4
Итак, order(a)
говорит: «Сначала поставьте третий элемент, когда сортируете ...», тогда как rank(a)
говорит: «Первый элемент является вторым самым низким. .. '. (Обратите внимание, что они оба согласны с тем, какой элемент является самым низким и т. Д., Они просто представляют информацию по-разному.) Таким образом, мы видим, что мы можем использовать order()
для сортировки, но мы не можем использовать rank()
следующим образом:
> a[order(a)]
[1] 10 45 50 96
> sort(a)
[1] 10 45 50 96
> a[rank(a)]
[1] 50 10 45 96
В общем случае order()
не будет rank()
, если вектор уже не был отсортирован:
> b <- sort(a)
> order(b)==rank(b)
[1] TRUE TRUE TRUE TRUE
Кроме того, поскольку order()
(по существу) работает над ряды данных, вы можете составить их, не влияя на информацию, но наоборот создает тарабарщину:
> order(rank(a))==order(a)
[1] TRUE TRUE TRUE TRUE
> rank(order(a))==rank(a)
[1] FALSE FALSE FALSE TRUE
order
и rank
фактически являются инверсиями друг друга (по крайней мере, пока значения в a
уникальны). Если вы предполагаете, что у каждого из них есть имена (/ labels) ('1', '2', '3', '4'), то значения order(a)
сообщают вам, какая позиция в rank(a)
(например, первое значение order(a)
(3) говорит вам, что «1» встречается в третьей позиции rank(a)
и наоборот (например, второе значение rank(a)
(3) сообщает вам, что «2» встречается в третьей позиции order(a)
). Это инверсные подстановки: rank(order(a))
= order(rank(a))
= 1 2 3 4
– Glen_b
27 September 2013 в 07:43
Простыми словами, order()
дает расположение элементов увеличивающейся величины.
Например, order(c(10,20,30))
даст 1,2,3, а order(c(30,20,10))
даст 3,2,1.
Это может помочь вам в какой-то момент.
a <- c(45,50,10,96)
a[order(a)]
Что вы получаете
[1] 10 45 50 96
Код, который я написал, указывает, что вы хотите «a» как целое подмножество «a», и вы хотите, чтобы он был заказан от самого низкого до самого высокого значения.
order(a, decreasing = T)
иrank(a)
вернут эквивалентный ответ. – omar 24 May 2016 в 11:10a<-c(4,2,1,80,13)
Тогдаorder(a)
должно быть3 4 5 1 2
, но странно я получаю3 2 1 5 4
– Shoham Debnath 27 May 2016 в 11:42rank
иorder
одинаковы? – Shoham Debnath 27 May 2016 в 11:45