2017-01-23 7 views
1

私は、各変数の1,2,3,4,5,6,7の有効な値を持つ3つの変数を持つデータフレームを持っています。変数に割り当てられている数値がない場合は、NAと表示されます。各行は3つのすべての変数間NAを持っているか、3つの変数の一つで一つの値だけを持つことができrの複数の列の値に基づいて変数を作成する方法

ak_eth co_eth pa_eth 
1  NA  1  NA 
2  NA  NA  1 
3  NA  NA  NA 
4  2  NA  NA 
5  NA  NA  4 
6  NA  NA  NA 

:以下のようなデータフレームaが見えます。私はrecodeという新しい変数を作成して、既存の3つの変数から値を取得します。 3つの既存の変数がすべてNAである場合、新しい値はNAです。既存の3つの変数のいずれかに値がある場合は、その値を新しい変数にとります。 これを試しましたが、私にとってはうまくいかなかったようです。

a$recode[is.na(a$ak_eth) & is.na(a$co_eth) & is.na(a$pa_eth)] <- "NA" 
library(car) 
a$recode <- recode(a$ak_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 
a$recode <- recode(a$co_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 
a$recode <- recode(a$pa_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 

ご了承ください。ありがとう!

+0

「NA」の文字を作成しないでください – akrun

答えて

3

我々はpmax

a$Recode_Var <- do.call(pmax, c(a, na.rm = TRUE)) 

を使用するか、pmin

a$Recode_Var <- do.call(pmin, c(a, na.rm = TRUE)) 

それとも別のオプションは、rowSums

r1 <- rowSums(a, na.rm = TRUE) 
a$Recode_Var <- replace(r1, r1==0, NA) 

NOTEで使用することができますよるとOPの投稿へEach row could have NA across all three variables or have only one value in one of the three variables

+0

ありがとうございました。すべてのソリューションが私のデータフレームで機能しました。可能であれば、私のコードがうまくいかなかった理由、特に自動車パッケージのコード変換機能について説明してください。 – littlestraw

+0

@littlestrawこれは、3列の結果に基づいて 'recode'を3回置き換えることのようなものなので、' recode'に割り当てることで1番目または2番目の出力を失います。 – akrun

関連する問題