我在stat0
列中排序后面的数据框(sds45)时遇到了一个奇怪的问题;
>sds45
icntr iexpt angle overlap Specified.Shot.Width V6 mcsp stat0
DD.Sigma2 3 1R50_50 45 0 50 rectangular 1.5 3.62075986666667
DD.Sigma5 6 1R50_35 45 15 50 rectangular 1.5 1.07005992333333
DD.Sigma8 9 1R50_40 45 10 50 rectangular 1.5 1.36916201
DD.Sigma11 12 1R50_30 45 20 50 rectangular 1.5 0.951408239333333
DD.Sigma14 15 1R100_75 45 25 100 rectangular 1.5 11.6972803333333
DD.Sigma17 18 1R100_80 45 20 100 rectangular 1.5 13.4350596666667
DD.Sigma20 21 1R100_90 45 10 100 rectangular 1.5 16.654366
DD.Sigma31 32 1R100_150 45 50 100 rectangular 1.5 2.19166406666667
DD.Sigma34 35 1R100_160 45 40 100 rectangular 1.5 5.4822418
DD.Sigma39 40 1C200_25 45 75 100 circular 1.5 0.704197414
DD.Sigma42 43 1C200_50 45 50 100 circular 1.5 1.03405964333333
DD.Sigma45 46 1C200_75 45 25 100 circular 1.5 7.03481966666667
DD.Sigma48 49 1C200_80 45 20 100 circular 1.5 9.19375816666667
我的第一个方法是:
test<-sds45[order(sds45$stat0),]
......什么也没做。
我也试过这个:
test=orderBy(~stat0, data=sds45)
我必须有一个基本的概念问题。我很感激对此的一点点教育。
答案 0 :(得分:3)
创建数据框时,stat0
中可能存在一些非数字字符,因此该列已转换为一个因子。当您对因子进行排序时,您将按基础级别代码进行排序,这些级别代码将按照这些值出现的顺序进行排序,因此顺序不会更改。
解决方案是将该列转换为数字。
您可以使用:
将该因子转换为数字,如您所愿factor_to_numeric <- function(f)
{
as.numeric(levels(f))[as.integer(f)]
}
sds45$stat0 <- factor_to_numeric(sds45$stat0)
也是一个好主意 非常重要来检查您的数据集以尝试找到那些非数字字符。如果该列包含脏数据,则数据集的其余部分可能还需要清理。