1. ホーム
  2. r

[解決済み] 条件文(`if`)に基づいてデータフレーム内の値を置き換える

2022-05-02 09:55:25

質問

以下のRデータフレームで、以下の時間をすべて置き換えたい。 B が現れると b .

junk <- data.frame(x <- rep(LETTERS[1:4], 3), y <- letters[1:12])
colnames(junk) <- c("nm", "val")

が提供します。

   nm val
1   A   a
2   B   b
3   C   c
4   D   d
5   A   e
6   B   f
7   C   g
8   D   h
9   A   i
10  B   j
11  C   k
12  D   l

私が最初に試みたのは forif のような文があります。

for(i in junk$nm) if(i %in% "B") junk$nm <- "b"

の値をすべて置き換えています。 junk$nmb . なぜこうなるかはわかるのですが、元の値がjunk$nmの場合だけ置き換えるようにすることができないようです。 B .

注意:私は、この問題を解決するために gsub しかし、Rを学ぶという意味で、私のオリジナルのアプローチを動作させる方法を知りたいのです(可能であれば)。

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

nmを文字に変換してから変更する方が簡単です。

junk$nm <- as.character(junk$nm)
junk$nm[junk$nm == "B"] <- "b"

EDIT: そして、もし本当にnmを要因として維持する必要があるのなら、最後にこれを追加してください。

junk$nm <- as.factor(junk$nm)