0

2つのデータフレームがあります。1つは1列(X)で、もう1つは2列(Y&Z)です。

列Xには1:99の数字が含まれていますが、数字の代わりに文字が含まれている場合があります。1, 2, 3, A, 5, B, 7, 8, C, D, 11, 12 etc.

列Yには、これらの同じ文字が含まれています。これらの文字は、(列Zに表示されるように)特定の数字とペアになっています。

A 4

B 6

C 9

D 10

X列の文字がY列の文字と一致するかどうかに応じて、X列の文字をZ列の値に置き換えるにはどうすればよいですか?これにより、列Xが1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 etc.

単純なmerge方法は機能せず(すべての値をXに保持する必要があります)、条件付きでどのように使用できるかわかりませんsub。また、列YとZには、列Xに必要な行よりも多くの行が含まれているため、を使用することはできませんcbind。私は使用するのがあまり得意ではありませんregexが、それがおそらく私の最善の策です...

どんな助けでも大歓迎です!

4

2 に答える 2

2

forループを使用します。データの作成:

df1 <- data.frame(X = c("A", 5, "B", 7, 8, "C", "D", 11, 12))
df2 <- data.frame(Y = c("A", "B", "C", "D"),
                  Z = c(4, 6, 9, 10))

平等をテストするには、物事が因子ではなく文字ベクトルであることを確認する必要があります

df1$X <- as.character(df1$X)
df2$Y <- as.character(df2$Y)

次に、置換を行うことができます。

for (i in 1:nrow(df2)) {
    df1$X[df1$X == df2$Y[i]] <- as.character(df2$Z[i])
}

X最後に、すべての文字がなくなったので、数値として必要だと思います。

df1$X <- as.numeric(df1$X)
于 2012-06-13T11:21:35.633 に答える
2

どうX[X==Y] <- Z[X==Y] ですか?または、Y、Zデータフレームを呼び出してDF

X[X==DF$Y] <- DF$Z[X==DF$Y]

編集:これは基本的にShujaの答えと同じですが、私が見る限り、ループは必要ありません。

于 2012-06-13T11:22:29.730 に答える