r - 因子的去重级别

标签 r

假设我有这个对象,它是无效因子的 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])

但我不确定这是否会在没有警告的情况下在 future 继续工作,而且它可能也非常低效(我试图修复的真实因素对象是巨大的)。

最佳答案

你的方法看起来不错,而且相当有效。为了进行实验,我创建了一个函数来生成这样的畸形因子:

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/

相关文章:

r - barplot 函数返回的中点实际上并不与条形的中点对齐

r - 在 ggplotly 中显示抖动

r - 多条件和不等式连接

r - 有没有办法将总和添加到 fviz_eig 图中?

R:数据帧操作

r - 使用 includeHTML 时 sidebarMenu 无法正常工作

R cor有时返回NaN

r - 是否有 R 函数可以按列名的一部分创建子集?

r - Shiny 的 dateInput 不包括 minViewMode 选项

r - 将多个级别编码为 2 个因子标签