Вот способ, использующий только tidyverse
пакеты. Мы можем получить номер из имени с помощью str_extract
, так как я представляю, что вам даны эти имена в некотором порядке, а не в том, чтобы создавать их с нуля. Затем мы можем использовать fct_reorder
, чтобы упорядочить имя, отсортировав его по номеру как число , а не как строку. Вы можете видеть, что dt$name
теперь является фактором с уровнями в правильном порядке.
library(tidyverse)
dt <- tibble(
name = str_c("dog", 1:20),
age = seq(1,10.5,0.5)
) %>%
mutate(
order = str_extract(name, "\\d+") %>% as.integer,
name = fct_reorder(name, order)
)
dt$name
#> [1] dog1 dog2 dog3 dog4 dog5 dog6 dog7 dog8 dog9 dog10 dog11
#> [12] dog12 dog13 dog14 dog15 dog16 dog17 dog18 dog19 dog20
#> 20 Levels: dog1 dog2 dog3 dog4 dog5 dog6 dog7 dog8 dog9 dog10 ... dog20
ggplot(dt, aes(x=name, y=age))+
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_line() +
geom_point()
#> geom_path: Each group consists of only one observation. Do you need to
#> adjust the group aesthetic?
![](https://i.imgur.com/hwdfZny.png)
Создано в 2019-03-20 пакетом представ. (v0.2.1)