gpt4 book ai didi

r - 如何将因子水平设置为它们在数据框中出现的顺序?

转载 作者:行者123 更新时间:2023-12-03 22:32:10 24 4
gpt4 key购买 nike

我想使用 ggplot 创建一个热图,但是我想按观察次数对 y 轴进行排序。我按列 N 对数据框进行排序,并将观察数添加到组名称中,以便它出现在轴标签中。当我绘制数据时,它会根据组名重新排序。有没有办法根据它们在数据框中出现的顺序来设置因子水平?

一些数据:

library(dplyr)
library(tidyr)
library(ggplot2)

school <- c("School A", "SChool B", "School C", "School D", "School E", "School F")
N <- c(25,28,12,22,30,25)
var1 <- c(1,0,1,1,0,1)
var2 <- c(0,0,0,1,0,1)
var3 <- c(0,1,0,1,1,1)

df <- tbl_df (data.frame (school, N, var1, var2, var3))

df <- arrange (df, N) %>%
gather (variable, value, var1:var3)

df$school <- paste0 (df$school, " (", df$N, ")")

df <- select (df, school, variable, value)

ggplot(df, aes(variable, school)) + geom_tile(aes(fill = value), colour = "white") +
scale_fill_gradient(low = "white",high = "steelblue")

最终我希望学校的顺序是:

学校 C (12)

学校 D (22)

学校 A (25)

学校 F (25)

乙校 (28)

学校 E (30)

由于我想对多个图执行此操作,因此我想找到一种自动执行此操作的方法,而不必每次都重新设置因子水平。

最佳答案

解决此问题的一种方法是更改​​您的 ggplot拨电至

ggplot(df, aes(variable, factor(school, levels = unique(school)))) + ...

为了避免每次都输入这个,你可以创建一个函数
f <- function(x) factor(x, levels = unique(x))

然后通过 ggplot(df, aes(variable, f(school))) + ... 调用它

请注意,这会将因子的第一个水平放置在图的底部。如果你想在顶部,你需要改变 ffunction(x) factor(x, levels = rev(unique(x)))

关于r - 如何将因子水平设置为它们在数据框中出现的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26469612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com