Вот один из вариантов
library(purrr)
library(tibble) # rownames_to_column
library(ggplot2)
plots <- split.default(dfslices, names(dfslices)) %>%
map(., setNames, nm = "col") %>%
map(., rownames_to_column) %>%
map(., mutate, rowname = factor(rowname, levels = c("verylow", "low", "medium", "high"))) %>%
imap(., ~ {
ggplot(.x, aes(rowname, col)) +
geom_col() +
labs(title = .y)
})
plots$X0035.A061
![enter image description here](https://i.stack.imgur.com/kaQLK.png)
Идея состоит в создании списка фреймов данных, каждый из которых содержит один столбец dfslices
,Мы используем split.default
для создания этого списка.
В следующих двух строках мы переименовываем столбцы в каждом кадре данных в «col» и для каждого кадра данных преобразуем его имена строк в явный столбец.На следующем шаге преобразуйте столбец rowname
в множитель и установите его уровни соответственно.
Наконец, можно использовать imap
для итерации списка и над именами этого списка, которые обозначены .y
.Мы используем .y
в качестве аргумента для labs
, чтобы заголовок каждого графика соответствовал (прежнему) имени столбца.
данные
dfslices <- structure(list(X0035.A061 = c(19.48052, 2.96846, 0, 0), X0094.B116 = c(8.127208,
9.069494, 2.237927, 0), X0314.A038 = c(36.8243243, 7.4324324,
0.3378378, 1.6891892)), .Names = c("X0035.A061", "X0094.B116",
"X0314.A038"), class = "data.frame", row.names = c("verylow",
"low", "medium", "high"))