Tar*_*Jae 4 r dplyr tidyr tidyverse relocate
是否有可能relocate 排在tidyverse框架像它可能与列dplyr relocate?
在这个例子中,我想将第 1 行重新定位到位置 5(数据帧的结尾)
我的数据框:
df <- structure(list(ID = c(1, 2, 3, 4, 5), var1 = c("a", "b", "c",
"d", "e"), var2 = c(1, 1, 0, 0, 1)), class = "data.frame", row.names = c(NA,
-5L))
df
ID var1 var2
1 1 a 1
2 2 b 1
3 3 c 0
4 4 d 0
5 5 e 1
Run Code Online (Sandbox Code Playgroud)
期望的输出:
ID var1 var2
1 2 b 1
2 3 c 0
3 4 d 0
4 5 e 1
5 1 a 1
Run Code Online (Sandbox Code Playgroud)
注意:在它应该是“管道友好”的解决方案中。我尝试了很多,但一无所获。谢谢你。
arrange()是用于重新排序行的 tidyverse 动词。它可以(ab)使用如下:
dplyr::arrange(df, ID==1)
Run Code Online (Sandbox Code Playgroud)
(ID==1是合乎逻辑的;当它被排序时,FALSE值出现在TRUE值之前......)
这不像relocate()(例如,如何说“移动 100-200 行,使它们紧跟在 1000 行之后”不是很明显),但您可能可以找到一种方法来完成大多数任务。
另一种选择(在我看来不太惯用)是slice():
dplyr::slice(df, order(ID==1))
Run Code Online (Sandbox Code Playgroud)
(这是@akrun 的 base-R 答案的 tidyverse 翻译)。这些解决方案中的任何一个也可以用管道编写(例如df %>% arrange(ID==1))。
顺便说一句:
df %>% `[`(order(.$ID==1),)
Run Code Online (Sandbox Code Playgroud)
使用 base R
df[order(df$ID == 1), ]
Run Code Online (Sandbox Code Playgroud)
或与 slice
library(dplyr)
df %>%
slice(2:n(), 1)
Run Code Online (Sandbox Code Playgroud)
或指定 row_number()
df %>%
slice(lead(row_number(), default = 1))
Run Code Online (Sandbox Code Playgroud)