根据整数按因子排序 data.frame

Order data.frame by factor based on integers

我有一个 data.frame,其中一列最初包含整数值,被转换为一个因子(我拥有的任何数据的上游)。

我想根据这个因素对 data.frame 进行排序,但是对结果进行排序后,这个因素的顺序是“1 2 3”而不是“1 11 12”当我使用 order 而不进行其他操作时会发生什么:

sample <- data.frame(a = c(1,2,2,3,4), b= factor(c("1","12","11","2","3")))
sample
  a  b
1 1  1
2 2 12
3 2 11
4 3  2
5 4  3
sample[order(sample$b),]
  a  b
1 1  1
3 2 11
2 2 12
4 3  2
5 4  3

因为我希望该列在我的最终数据集中保留一个因子,所以我犹豫是否将该列转换为整数(因为 as.integeras.numeric 在应用于因子时存在问题) .我在这个因素中也有将近100个水平,因此以需要我写出每个水平的方式手动重新定义该因素的水平也不理想。

在将 'b' 列转换为 numeric class 之后,我们可以 order 数据集行,但是 'b' 的 class仍然保持 factor.

sample1 <- sample[order(as.numeric(as.character(sample$b))),]
row.names(sample1) <- NULL
str(sample1)
#'data.frame':   5 obs. of  2 variables:
#$ a: num  1 3 4 2 2
#$ b: Factor w/ 5 levels "1","11","12",..: 1 4 5 2 3

sample1
#  a  b
#1 1  1
#2 3  2
#3 4  3
#4 2 11
#5 2 12