`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)]