关键问题: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
?)谢谢