主な問題: を使用setattr
してレベル名を変更すると、不要な重複が保持されます。
いくつかの因子レベルを持ついくつかのデータを消去していますが、それらはすべて同じで、2 つ以上の異なるレベルとして表示されます。(このエラーは主にタイプミスとファイル エンコーディングの問題によるものです) 153,000 個の要素があり、約 5% を修正する必要があります。
例
次の例では、ベクトルに 3 つのレベルがあり、そのうちの 2 つを 1 つに折りたたむ必要があります。
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
ベクトルは の一部です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
?)ありがとう