`setattr`on`levels`保留不需要的重复项(R data.table)

`setattr`on`levels`保留不需要的重复项(R data.table),r,data.table,duplicate-removal,R,Data.table,Duplicate Removal,关键问题:使用setattr更改级别名称,保留不需要的重复项 我正在清理一些数据,其中我有七个早期因子级别,所有这些级别都是相同的,显示为两个或更多不同的级别。 (此错误主要是由于打字错误和文件编码问题造成的) 我有153K个因子,大约5%需要修正 示例 在下面的示例中,向量有三个级别,其中两个级别需要折叠为一个级别 incorrect <- factor(c("AOB", "QTX", "A_B")) # this is how the data were entered c

关键问题:使用
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
关于为什么会这样和/或改变这种行为的任何选项有何想法?(即
…,液滴液位=真值
?)
感谢您,setattr是一种通过引用更改属性的低级暴力方式。它不知道“levels”属性是特殊的<代码>levelsHi<代码>级别?级别状态
注意,对于一个因素,通过级别(x)@mnel替换级别,感谢您的参考。这似乎是
setattr
的问题,与数据无关。TableThank@MD,我一直在使用
droplevels()
删除重复项,但它给出了以下错误,正如上面使用
factor()
的方法一样:
重复的级别将不再允许在factors中出现
PS“不正确”是指数据(即脏的),而不是功能(即,相当惊人,不管这个微小的细微差别),我恐怕以前没有看到这个错误消息。“不再”似乎暗示这是新的东西。抱歉。显然问题出在
setattr
上。如果我对基本向量应用相同的过程(即,通过
setattr
纠正级别,然后调用
droplevels
),我会得到相同的警告。
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
mydt1[,factorCol:=factor(factorCol)]