dplyr::row_number() 是否计算每个 obs 的行号?如果是这样,如何?
Does dplyr::row_number() calculate row number for each obs? If so, how?
在tidyverse website参考资料中,我看到了两种用法mutate(mtcars, row_number() == 1L)
和mtcars %>% filter(between(row_number(), 1, 10))
。可以直接认为 row_number()
函数是 return 数据框中每个观察值的行号。
但是在文档中已经强调,该函数是一个window函数,类似于其他语言的sortperm
。如示例所示:
x <- c(5, 1, 3, 2, 2, NA)
row_number(x)
# [1] 5 1 4 2 3 NA
请问这个函数是为了报告每个观察的行号吗?如果是,函数调用背后的逻辑流程是什么?
谢谢!
如?row_number
所说,row_number
等同于rank(ties.method = "first")
,其中rank
(参见?rank
)returns样本排名向量中的值并使用 "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
由于 ties = "first"
,我们给第一个 2
较低的排名。
现在,当我们在 filter
、mutate
调用中简单地使用 row_number()
时,确实它似乎只是 return 一个行号向量,可以发现here.
在tidyverse website参考资料中,我看到了两种用法mutate(mtcars, row_number() == 1L)
和mtcars %>% filter(between(row_number(), 1, 10))
。可以直接认为 row_number()
函数是 return 数据框中每个观察值的行号。
但是在文档中已经强调,该函数是一个window函数,类似于其他语言的sortperm
。如示例所示:
x <- c(5, 1, 3, 2, 2, NA)
row_number(x)
# [1] 5 1 4 2 3 NA
请问这个函数是为了报告每个观察的行号吗?如果是,函数调用背后的逻辑流程是什么?
谢谢!
如?row_number
所说,row_number
等同于rank(ties.method = "first")
,其中rank
(参见?rank
)returns样本排名向量中的值并使用 "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
由于 ties = "first"
,我们给第一个 2
较低的排名。
现在,当我们在 filter
、mutate
调用中简单地使用 row_number()
时,确实它似乎只是 return 一个行号向量,可以发现here.