web-dev-qa-db-ja.com

Rのファクターの1つのレベルの名前を変更します

RのデータフレームAのファクターcolumn1のレベルdfの名前を変更しようとしています。現在のアプローチは次のとおりです。

levels(df[!is.na(df$column1) & df$column1 == 'A',]) <- 'B'

エラーや警告は発生しませんが、まったく効果がありません。

Bは既存のレベルではないため(試行錯誤の結果、重要だと思われました)、最初の試みである次のレベルも機能しませんでした。

df[!is.na(df$column1) & df$column1 == 'A', 'column1'] <- 'B'

誰かが私を正しいアプローチに導くことができますか?

17
perilousGourd

私は提案するつもりでした

_levels(df$column1)[levels(df$column1)=="A"] <- "B"
_

または、ユーティリティ関数_plyr::revalue_を使用します。

_library("plyr")
df <- transform(df,
          column1=revalue(column1,c("A"="B")))
_

transform()は必要のない小さな砂糖です。 df$column1 <- revalue(df$column1(...))を使用できます

完全を期すために、_car::recode_も機能しますが、_plyr::revalue_よりも少し不格好です(再コーディングは引用符で囲まれた文字列として指定されているため)。

_car::recode(df$column1,"'A'='B'")
_
22
Ben Bolker

1つの方法は、レベルのラベルを変更することです。まず、いくつかのテストデータ

_df <- data.frame(column1=c("A","B","C","A","B"))
_

そして今、「A」を「X」に置き換えます

_levels(df$column1) <- gsub("A","X", levels(df$column1))
_

変更されていることがわかります

_  column1
1       X
2       B
3       C
4       X
5       B
_

gsub()は正規表現を受け入れるため、注意が必要な場合があります。より具体的な交換は

_gsub("^A$","X", levels(df$column1))
_

「CAB」などの大文字のAではなく、「A」と正確に一致します。

6
MrFlick