/ /列の値をrの既存の要素で置き換える - r

列の値をr - rの既存の係数で置き換える

データセットがあります。列 "workclass"には次の値があります。

ここに画像の説明を入力

今、私にとっては、値「privat」は実際には「Private」と同じなので、それに応じて変更したいと思います。

次のコマンドを実行すると、係数が定義されていないのでエラーメッセージが表示されます。

    > adult$workclass[adult$workclass == "privat"] <- "Private"
Warning message:
In `[<-.factor`(`*tmp*`, adult$workclass == "privat", value = c(7L,  :
invalid factor level, NA generated

操作後に列を「unfactor」し、再度「refactor」すると、「Private」には2つの異なる要素が生じます。

    > adult$workclass <- as.character(adult$workclass)
> adult$workclass[adult$workclass=="privat"]  <- "Private"
> adult$workclass <- as.factor(adult$workclass)
> summary(adult$workclass)
Federal-gov         Local-gov      Never-worked           Private
960              2093                 7             22686
Self-emp-inc  Self-emp-not-inc         State-gov       Without-pay
1116              2541              1298                14
Private              NA"s
10              1836

"privat"と "Private"をマージするにはどうすればいいですか?

回答:

回答№1は0

の出力は何ですか? levels(adult$workclass)?あなたの "Private"レベルが、 "Private"という文字列と完全に同じではないようです。

次のコードを実行すると、望ましい結果が得られます。

f <- data.frame(f=factor(c(
rep("Federal-gov", 960),
rep("Local-gov", 2093),
rep("Never-worked", 7),
rep("Private", 22686),
rep("Self-emp-inc", 1116),
rep("Self-emp-not-inc", 2541),
rep("State-gov", 1298),
rep("Without-pay", 14),
rep("privat", 10),
rep("NA"s", 1836)
)))

f$f[f$f=="privat"] <- "Private"
f <- droplevels(f)
table(f)
Federal-gov        Local-gov             NA"s     Never-worked
960             2093             1836                7
Private     Self-emp-inc Self-emp-not-inc        State-gov
22696             1116             2541             1298
Without-pay
14

回答№2の場合は0

あなたが試すことができます:

library(dplyr)
adult %>%
mutate(workclass = recode_factor(workclass, privat = "Private"))