1. ホーム
  2. r

[解決済み] 複数の値を一度に置換する方法【重複】について

2022-02-08 01:21:39

質問

ベクター内の異なる値を、一度に特定の他の値に置き換えたいのですが。

私が取り組んでいる問題では

  • 1 は 2 に置き換えてください。
  • 2を4とする。
  • 3 with 6,
  • 4 with 8,
  • 5 with 1,
  • 6 with 3,
  • 7 with 5 and
  • 7で8。

そうすると。

x <- c(4, 2, 0, 7, 5, 7, 8, 9)
x
[1] 4 2 0 7 5 7 8 9

に変換されます。

[1] 8 4 0 5 1 5 7 9

を置き換えた後。

を使ってみました。

x[x == 1] <- 2
x[x == 2] <- 4

といった具合に、1が7に置き換わってしまう結果になります。

この問題に対して、パッケージを使わない最も簡単な解決策は何でしょうか?

どのように解決するのですか?

考えられる解決策

old <- 1:8
new <- c(2,4,6,8,1,3,5,7)

x[x %in% old] <- new[match(x, old, nomatch = 0)]

となります。

> x
[1] 8 4 0 5 1 5 7 9

これは何をするものなのか

  • 2つのベクトルを作成します。 old には置換が必要な値、そして new を、対応する置換文字列に置き換えます。
  • 使用方法 match からの値がどこにあるか確認するために x で発生します。 old . 使用方法 nomatch = 0 を削除するために NA 's. の位置のインデックスベクターになります。 old に対して x
  • このインデックス・ベクトルは、次に new .
  • の値のみを割り当てる。 new の位置には x に存在する old : x[x %in% old]