问题描述
我的数据:
structure(list(LoB = c("C", "C", "C", "A",
"A", "B", "C", "A", "A", "C",
"A", "B", "C", "B", "A", "C", "B",
"A", "B", "C", "A", "B", "B", "A",
"B", "C", "A", "B", "C", "B"), word = c("speed",
"connection", "call", "bt", "reliable", "reliable", "reliable",
"expensive", "cheaper", "uk", "customer", "customer", "customer",
"network", "broadband", "broadband", "signal", "price", "price",
"price", "poor", "poor", "ee", "service", "service", "service",
"excellent", "excellent", "excellent", "coverage"), word_total = c(68L,
46L, 44L, 3138L, 3479L, 906L, 71L, 6096L, 2967L, 39L, 10405L,
1429L, 113L, 676L, 5193L, 73L, 868L, 8763L, 814L, 139L, 4708L,
659L, 530L, 19185L, 2253L, 136L, 7180L, 1227L, 69L, 1453L), word_prop_by_total_feedbacks = c(0.0656370656370656,
0.0444015444015444, 0.0424710424710425, 0.0343378635677237, 0.0380692885124636,
0.101603678367164, 0.0685328185328185, 0.0667060600091918, 0.0324666797977808,
0.0376447876447876, 0.113857702492723, 0.160255691376023, 0.109073359073359,
0.075810250084109, 0.0568248965924759, 0.0704633204633205, 0.0973421554334417,
0.0958899612632132, 0.0912863070539419, 0.134169884169884, 0.0515177379467314,
0.0739037792979702, 0.0594370303913872, 0.209933687873416, 0.252663451833576,
0.131274131274131, 0.0785678331473092, 0.137602332623079, 0.0666023166023166,
0.16294717954469)), class = c("grouped_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -30L), vars = "LoB", drop = TRUE, indices = list(
c(3L, 4L, 7L, 8L, 10L, 14L, 17L, 20L, 23L, 26L), c(5L, 11L,
13L, 16L, 18L, 21L, 22L, 24L, 27L, 29L), c(0L, 1L, 2L, 6L,
9L, 12L, 15L, 19L, 25L, 28L)), group_sizes = c(10L, 10L,
10L), biggest_group_size = 10L, labels = structure(list(LoB = c("A",
"B", "C")), class = "data.frame", row.names = c(NA, -3L
), vars = "LoB", drop = TRUE, .Names = "LoB"), .Names = c("LoB",
"word", "word_total", "word_prop_by_total_feedbacks"))
我正在尝试使用ggplot2
进行绘图,但是fct_reorder
和drlib::reorder_within(word, word_total, LoB)
无法正常工作,并给我一个警告消息:Unequal factor levels: coercing to characterbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vector
I am trying to plot using ggplot2
but fct_reorder
and drlib::reorder_within(word, word_total, LoB)
not working and giving me a warning message: Unequal factor levels: coercing to characterbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vector
这是代码:
mutate(word = drlib::reorder_within(word, word_total, LoB)) %>%
OR
mutate(word = forcats::fct_reorder(word, word_total)) %>%
ggplot(aes(word, word_prop_by_total_feedbacks, fill = LoB)) +
geom_col() +
# drlib::scale_x_reordered()+
facet_wrap(~ LoB, scales = "free") +
coord_flip()
它不是按降序绘制.我想念什么?
it is not plotting in descending order. what am I missing?
更新:在mutate()
之前缺少ungroup()
.谢谢大家
Update: Was missing ungroup()
before mutate()
. thanks all
推荐答案
与@austensen类似,但是对factor
厌恶使用不同的方法.
Similar to @austensen, but using a different method for the factor
averse.
您可以仅相应地group_by
和arrange
,然后ungroup
并创建索引.这样,您不必担心使用factor
,但是您必须在scale_x_continuous
中创建breaks
和labels
.
You can just group_by
and arrange
accordingly, then ungroup
and create and index. This way you don't have to worry about using factor
, but you do have to create breaks
and labels
in scale_x_continuous
.
library(ggplot2)
library(dplyr)
plot_data <- df %>%
group_by(LoB) %>%
arrange(word_total) %>%
ungroup() %>%
mutate(order = row_number())
ggplot(plot_data, aes(order, word_prop_by_total_feedbacks, fill = LoB)) +
geom_col() +
facet_wrap(~ LoB, scales = "free") +
scale_x_continuous(breaks = plot_data$order, labels = plot_data$word) +
coord_flip()
这篇关于使用R中的fct_reorder根据值对因子进行重新排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!