R:按字母数字对数据帧进行排序
我有一个数据框,它存储每个模型的计数值。型号名称为字母数字。然后我使用ggplot2生成条形图,模型在x轴,计数在y轴。我想订购我的x轴。x轴在数据框和绘图的x轴中显示如下。我想对它进行适当的排序,例如,M_1,M_2,M_3,M_10,M_11,M_20等等R:按字母数字对数据帧进行排序,r,sorting,alphanumeric,R,Sorting,Alphanumeric,我有一个数据框,它存储每个模型的计数值。型号名称为字母数字。然后我使用ggplot2生成条形图,模型在x轴,计数在y轴。我想订购我的x轴。x轴在数据框和绘图的x轴中显示如下。我想对它进行适当的排序,例如,M_1,M_2,M_3,M_10,M_11,M_20等等 Model Count M_1 73 M_10 71 M_100 65 M_11 65 M_110 64 M_111 71 M_13 70 M_130 73 M_2 72 M_20 69 M_2
Model Count
M_1 73
M_10 71
M_100 65
M_11 65
M_110 64
M_111 71
M_13 70
M_130 73
M_2 72
M_20 69
M_200 63
M_21 72
M_210 72
M_211 67
M_3 78
M_30 76
M_300 59
M_31 73
M_310 64
我尝试使用order()、mixedsort()、arrange()对ggplot2中的数据帧和factor()进行排序。然而,这项计划并没有成功
geneDFColSum[with(geneDFColSum, order(geneDFColSum$Model)), ]
geneDFColSum[with(geneDFColSum, mixedsort(geneDFColSum$Model)), ]
library(dplyr)
arrange(geneDFColSum, Model)
有没有办法做到这一点?我可以把型号分成一个单独的列,然后按该列排序。然而,看看是否有一个简单的方法 您需要排序因子的级别,而不是数据行:
dd$Model = factor(dd$Model, levels = gtools::mixedsort(dd$Model))
ggplot(dd, aes(x = Model, y = Count)) + geom_col()
将其用作输入数据:
dd = read.table(text = "Model Count
M_1 73
M_10 71
M_100 65
M_11 65
M_110 64
M_111 71
M_13 70
M_130 73
M_2 72
M_20 69
M_200 63
M_21 72
M_210 72
M_211 67
M_3 78
M_30 76
M_300 59
M_31 73
M_310 64", header = T, stringsAsFactors = FALSE)
这里有一个基于您的想法的解决方案“将型号分成一个单独的列,并按该列排序”。然后,您可以使用它对因子级别进行重新排序
library(tidyverse)
geneDFColSum %>%
mutate(Order = as.numeric(gsub("M_", "", Model))) %>%
arrange(Order) %>%
mutate(Model = factor(Model, levels = Model)) %>%
ggplot(aes(Model, Count)) +
geom_col()
行数据的顺序与绘图顺序无关,只与因子级别的顺序有关。如果您可以将正确的顺序放入某个变量,
my_order
,然后执行geneDFColSum$Model=factor(geneDFColSum$Model,levels=unique(geneDFColSum$Model))
以设置数据顺序中的级别顺序。我之前做了完全相同的事情,但没有成功。但是我发现了错误所在。在创建数据帧时,我没有提到“stringsAsFactors=FALSE”。我用这个选项再次创建了数据帧,现在它可以工作了。谢谢你。是的,混合排序法不适用于你喜欢的因素。@neilfws谢谢你的回答。