Как переставить тибл по именам строк - PullRequest
0 голосов
/ 16 мая 2019

Традиционные фреймы данных поддерживают перестановку строк по именам строк:

> 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"), ]

, то есть подмножество и перестановка строк кадра данных.

1 Ответ

1 голос
/ 16 мая 2019

Как описал Джоран, вы можете использовать фильтр, чтобы выбрать интересующие строки, а затем, чтобы расположить столбик в определенном порядке, заданном вручную, вы можете использовать arrange с factor:

tibble(rowname = paste0("x", 1:3), c1 = letters[1:3], c2 = 1:3) %>%
  filter(rowname %in% c("x3", "x1")) %>%
  arrange(factor(rowname, levels = c("x3", "x1")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...