关键问题:setattr用于更改级别名称,保留不需要的重复项。
我正在清理一些具有多个因子水平的数据,所有这些水平都是相同的,显示为两个或多个不同的水平。(这个错误主要是由于拼写错误和文件编码问题)我有 153K 因子,大约 5% 需要更正。
例子
在下面的示例中,向量具有三个级别,其中两个需要折叠为一个。
  incorrect <- factor(c("AOB", "QTX", "A_B"))   # this is how the data were entered
  correct   <- factor(c("AOB", "QTX", "AOB"))   # this is how the data *should* be
  > incorrect
  [1] AOB QTX A_B
  Levels: A_B AOB QTX   <~~ Note that "A_B" should be "AOB"
  > correct
  [1] AOB QTX AOB
  Levels: AOB QTX
向量是 a 的一部分data.table。
使用该levels<-功能更改关卡名称时一切正常。
但是,如果使用setattr,则会保留不需要的重复项。
mydt1 <- data.table(id=1:3, incorrect, key="id")
mydt2 <- data.table(id=1:3, incorrect, key="id")
# assigning levels, duplicate levels are dropped
levels(mydt1$incorrect) <- gsub("_", "O", levels(mydt1$incorrect))
# using setattr, duplicate levels are not dropped
setattr(mydt2$incorrect, "levels", gsub("_", "O", levels(mydt2$incorrect)))
                # RESULTS
# Assigning Levels       # Using `setattr`
> mydt1$incorrect        >     mydt2$incorrect
[1] AOB QTX AOB          [1] AOB QTX AOB
Levels: AOB QTX          Levels: AOB AOB QTX   <~~~ Notice the duplicate level
关于为什么会这样和/或改变这种行为的任何选项的任何想法?(即..., droplevels=TRUE?)谢谢