Вычисляет ли dplyr :: row_number () номер строки для каждого объекта? Если так, то как? - PullRequest
0 голосов
/ 03 января 2019

На ссылке tidyverse я видел два варианта использования mutate(mtcars, row_number() == 1L) и mtcars %>% filter(between(row_number(), 1, 10)). Было бы просто подумать, что функция row_number() возвращает номер строки для каждого наблюдения в кадре данных.

Однако в документации подчеркивалось, что эта функция является оконной функцией и аналогична sortperm в других языках. Как в примере:

x <- c(5, 1, 3, 2, 2, NA)
row_number(x)
# [1]  5  1  4  2  3 NA

Могу ли я спросить, предназначена ли эта функция для сообщения номера строки для каждого наблюдения? Если да, то какой логический поток стоит за вызовом функции?

Спасибо!

1 Ответ

0 голосов
/ 03 января 2019

Как говорит ?row_number, row_number эквивалентно rank(ties.method = "first"), где rank (см. ?rank) возвращает выборочные ранги значений в векторе, а использование "first" приводит к перестановке с увеличениемзначения в каждом индексе набора связей:

row_number
# function (x) 
# rank(x, ties.method = "first", na.last = "keep")
# <bytecode: 0x108538478>
# <environment: namespace:dplyr>

Итак,

x <- c(5, 1, 3, 2, 2, NA)
row_number(x)
# [1]  5  1  4  2  3 NA
rank(x, ties = "first", na.last = "keep") # I added na.last = "keep" to fully replicate row_number
# [1]  5  1  4  2  3 NA

, начиная с

sort(x)
# [1] 1 2 2 3 5

, и мы присвоили первому 2 более низкий рангиз-за ties = "first".

Теперь, когда мы используем просто row_number() в filter, mutate вызовах, тогда действительно, кажется, просто возвращается вектор номеров строк, который можно найти здесь .

...