在tidyverse website参考中,我看到了两种用法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
请问该功能是否旨在报告每次观察的行号?如果是,那么函数调用背后的逻辑流程是什么?
谢谢!
答案 0 :(得分:2)
正如?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
时,实际上似乎只是返回了行号向量,如here所示。