0

最初の変数の 1 が新しい変数で 0 になり、2 番目の変数のすべての数字が保持されるように、2 つのバイナリ変数を新しい変数に再コーディングしています。以下のコードは、作成したいロジックを示しています。ただし、このコードを実行すると、ifelse() を使用した再コーディングは、x1 の 1 を 0 として使用する最初の ifelse() 行を組み込むことなく、x2 を再作成するだけです。

set.seed(123)
x1 <- sample(c(0,1,NA), 20, replace = TRUE)
x2 <- sample(c(0,1,NA), 20, replace = TRUE)

recode <- ifelse(x1 == 1, 0, NA)
recode <- ifelse(x2 == 1, 1, recode)
recode <- ifelse(x2 == 0, 0, recode)

table(recode); table(x2)

ありがとう

4

4 に答える 4

4

申し訳ありませんが、それはあなたがやりたかったことをします。あなたが忘れているかもしれない問題は、 NA と何かを比較した結果も NA であるため、ififelse( x2 == 0, yes, no )の代わりに NA を返すことです。nox2 == NA

試したほうがいい

recode <- rep( NA, length( x1 ) )
recode[ x1 == 1 ] <- 0
recode[ ! is.na( x2 ) ] <- x2[ ! is.na( x2 ) ]
于 2013-07-09T17:33:48.027 に答える
3

多分あなたはこれが欲しいですか?

ifelse(is.na(x2), ifelse(x1 == 1, 0, NA), x2)
于 2013-07-09T17:35:39.213 に答える
2

それらの結果を上書きしました。help('ifelse') ページの詳細セクションの関連する行は次のとおりです。

 Missing values in test give missing values in the result.

recode <- ifelse(x1 == 1, 0, NA)
recode[ !is.na(x2)] <- x2[!is.na(x2)]
于 2013-07-09T17:37:15.690 に答える