假设我有这个对象,它是无效因素的dput()形式(例如,打印它会抱怨重复的3级):

x <- structure(c(1L, 2L, 3L, 4L), .Label = c("A", "B", "A", "C"),
               class = "factor")


仅使用基数R将其转换为有效因数的最佳方法是什么

structure(c(1L, 2L, 1L, 3L), .Label = c("A", "B", "C"), class = "factor")


我设法提出

factor(levels(x)[x])


但是我不确定这会在将来没有警告的情况下继续起作用,而且效率可能也很低(我要修复的实际因素对象非常庞大)。

最佳答案

您的方法似乎不错,而且相当有效。为了进行实验,我创建了一个函数来制作此类格式错误的因素:

bad.factor <- function(nums,labs){
  structure(nums, .Label = labs, class = "factor")}


如果您使用:

x <- bad.factor(1:1000000,gtools::chr(runif(1000000,65,90)))


然后运行:

microbenchmark::microbenchmark(factor(levels(x)[x]))


典型输出为:

 Unit: milliseconds
                 expr      min       lq     mean   median       uq      max neval
 factor(levels(x)[x]) 27.72593 32.98346 42.97813 34.11871 35.70919 105.3564   100

关于r - 重复数据删除级别的因素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48772278/

10-12 17:10