Dataframe列的排序不正确

Dataframe列的排序不正确,r,R,对于具有三列的数据帧- $x-at $y-at $z-at -我有以下代码来生成可用于绘制堆叠条形图的数据帧: counted <- data.frame(table(myDf$x),variable='x') counted <- rbind(counted,data.frame(table(myDf$y),variable='y')) counted <- rbind(counted,data.frame(table(myDf$z),variable='z')) -我得到

对于具有三列的数据帧-

$x-at $y-at $z-at -我有以下代码来生成可用于绘制堆叠条形图的数据帧:

counted <- data.frame(table(myDf$x),variable='x')
counted <- rbind(counted,data.frame(table(myDf$y),variable='y'))
counted <- rbind(counted,data.frame(table(myDf$z),variable='z'))
-我得到一个数据帧,其中列Var1现在的级别顺序如下:

"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", 19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
"30", "31", "32", "33", "34", "35", 36", 37", "39", "42", "46", "47", "53", "54", "38",
"40", "41", "43", "44", "45", "48", "49", "50"
结果扭曲了条形图的x轴…,54,38,40,41,43

如何计数。按升序正确排序

注意。打印操作如下所示:

stackedBp <- ggplot(counted,aes(x=Var1,y=Freq,fill=variable))
stackedBp <- stackedBp+geom_bar(stat='identity')+scale_x_discrete('Levels')+scale_y_continuous('Frequency')
stackedBp

我认为类似这样的东西应该能让Var1正确排序:


已计数。排序$Var1我认为类似这样的东西应该可以使Var1正确排序:


计数。排序$Var1如评论中所述,R的?因子让您感到困惑

让我们从桌子开始。该命令用于将观察结果交叉分类为不同的类别。这里隐含的是,生成的类别通常是分类的,而不是数字的

这就是为什么将表传递给data.frame时,表类别会转换为因子。检查以下部件的结构:

因素的级别和标签之间有一个重要的区别。在内部,因子始终存储为整数代码,这些代码可能与标签不对应。内部代码完全是任意的,只是为了记账

安全的方法是进行两次强制:

counted$Var1 <- as.numeric(as.character(counted$Var1))

此外,您应该记住,对数据帧进行排序不会改变与该数据帧中的因子相关联的基本顺序。要改变这种行为,您实际上需要在直接指定级别时使用有序参数来计算因子。对数据帧进行排序只会更改值的存储顺序,而不是级别的顺序。

如注释中所述,R的?因子会让您感到困惑

让我们从桌子开始。该命令用于将观察结果交叉分类为不同的类别。这里隐含的是,生成的类别通常是分类的,而不是数字的

这就是为什么将表传递给data.frame时,表类别会转换为因子。检查以下部件的结构:

因素的级别和标签之间有一个重要的区别。在内部,因子始终存储为整数代码,这些代码可能与标签不对应。内部代码完全是任意的,只是为了记账

安全的方法是进行两次强制:

counted$Var1 <- as.numeric(as.character(counted$Var1))

此外,您应该记住,对数据帧进行排序不会改变与该数据帧中的因子相关联的基本顺序。要改变这种行为,您实际上需要在直接指定级别时使用有序参数来计算因子。对数据框进行排序只是更改值的存储顺序,而不是级别的顺序。

您当前的绘图方式如何?不知道。。。将Var1列转换为整数而不是因子可能会解决您的问题。有关转换方法,请参见?因子。@Justin我尝试过整数,但由于某种原因,它会将Var1中的值增加1,尽管它确实解决了排序问题。您目前的绘图方式如何?不知道。。。将Var1列转换为整数而不是因子可能会解决您的问题。有关转换方法,请参见?因子。@Justin我尝试了integer,但由于某种原因,它会将Var1中的值增加1,尽管它确实解决了排序问题。在使用unique后,它的排序仍然不正确。Justin的整数解决方案有效,除了Var1的值在转换为整数时增加1或更多。您是否尝试计数。排序$Var1是的,这也有效。我想我不能同时接受这两种解决方案。谢谢。使用“唯一”后,仍然没有正确排序。Justin的整数解决方案有效,除了Var1的值在转换为整数时增加1或更多。您是否尝试计数。排序$Var1是的,这也有效。我想我不能同时接受这两种解决方案。谢谢
counted$Var1 <- as.numeric(as.character(counted$Var1))
stackedBp <- ggplot(counted,aes(x=factor(Var1),y=Freq,fill=variable))