这实际上是关于为什么和如何在R中这种行为的问题。
我有一个载体
c("18", "68", "18-20", "22", "27", "16-18", "unkown")
我希望如果我跑了
as.factor(c("18", "68", "18-20", "22", "27", "16-18", "unkown"))
级别将遵循向量元素的顺序。相反,它们的排序就像R试图解释每个元素中的数字字符一样:
[1] 18 68 18-20 22 27 16-18 unkown
Levels: 16-18 18 18-20 22 27 68 unkown
如果元素是类字符,但实际上是整数/数字,我可以看到如何发生这种情况。但是由于18-20
之类的格式更加模糊,我不确定R知道如何订购它们。
事实上,如果我必须转换为两个步骤的因子(首先是整数,然后是因子):
> as.integer(c("18", "68", "18-20", "22", "27", "16-18", "unkown"))
[1] 18 68 NA 22 27 NA NA
Warning message:
NAs introduced by coercion
这很有道理,因为18-20
是一个简单的字符串。
答案 0 :(得分:1)
如果未提供任何级别,则文档说明:
级别:x的值(作为字符串)的可选向量 可能已经采取了。默认值是采用的唯一值集 as.character(x),按x的递增顺序排序。注意这一套 可以指定为小于sort(unique(x))。
因此它与数值无关,它们被排序为好像它们是字符串。事实上:
> sort(unique(as.character(c("18", "68", "18-20", "22", "27", "16-18", "unkown"))))
[1] "16-18" "18" "18-20" "22" "27" "68" "unkown"
您可以按如下方式阻止排序:
> x=c("18", "68", "18-20", "22", "27", "16-18", "unkown")
> factor(x,levels=unique(x))
[1] 18 68 18-20 22 27 16-18 unkown
Levels: 18 68 18-20 22 27 16-18 unkown