Традиционные фреймы данных поддерживают перестановку строк по именам строк:
> df <- data.frame(c1 = letters[1:3], c2 = 1:3, row.names = paste0("x", 1:3))
> df
c1 c2
x1 a 1
x2 b 2
x3 c 3
#' If we want, say, row "x3" and "x1":
> df[c("x3", "x1"), ]
c1 c2
x3 c 3
x1 a 1
Когда дело доходит до тиббла, поскольку в нем отсутствует понятие имен строк, мне интересно, каким стандартным способом является достижение аналогичной цели.
> tb <- as_tibble(rownames_to_column(df))
> tb
# A tibble: 3 x 3
rowname c1 c2
<chr> <fct> <int>
1 x1 a 1
2 x2 b 2
3 x3 c 3
> ?
Спасибо.
Обновление
Я могу предложить следующее решение:
> tb[match(c("x3", "x1"), tb[["rowname"]]), ]
# A tibble: 2 x 3
rowname c1 c2
<chr> <fct> <int>
1 x3 c 3
2 x1 a 1
Но это кажется неуклюжим. У кого-нибудь есть идея получше?
Обновление 2
В более обобщенном смысле мой вопрос можно перефразировать следующим образом: синтаксисом tidyverse
, который является наиболее аккуратным и быстрым эквивалентом
df[c("x3", "x1"), ]
, то есть подмножество и перестановка строк кадра данных.