2017-09-21 5 views
0

2つの変数var1とvar2を含むデータセットがあります。場合によっては、var1に値を持ち、var2に値を持ちます。 var1の値を持つケースはvar2のNAであり、その逆もあります。これらの変数を値1または0で1つに結合したいと思います。新しい変数は、var1またはvar2の値が1の場合は1の値をとり、var1またはvar2の値が0の場合は0の値をとり、 var1とvar2の両方がNAである場合のみ、NA。2つの列に基づいたネストされた新しい列。他の1つの列に存在する場合はNAを無視する

基本的には、他に値がある場合はRにvar1またはvar2を無視させ、NAだけを返すのは両方の変数に存在するようにします。

私は、次の解決方法を試してみました:

初の試み:

df$new_var<-ifelse(df$var1==1|df$var2==1,1, 
        ifelse(df$var1<1|df$var2<1,0, 
         ifelse(is.na(df$var1)&df$var2<1,0,0 
          ifelse(is.na(df$var2)&df$var1<1,0,0)))) 

第二の試み:

df$new_var<-ifelse(df$var1==1|df$var2==1,1, 
        ifelse(df$var1==0|df$var2==0,0,NA)) 

第三の試み:

df$new_var<-ifelse(df$var1==1|df$var2==1,1, 
        ifelse(df$var1==0|df$var2==0,0,NA)) 

すべての変数のwiを返します。 th 1とNAsと0はありません。

私は間違っていますか?

+0

どの値が1と0ですか? –

+0

@Moody_Mudskipper - OPで指定された変数の1つだけがNA以外の値を持つことができます - "var1の値を持つケースはvar2のNAで、その逆もあります" - 実際は表示されるよりもずっと簡単です:) –

+0

Right !ありがとう:) –

答えて

0

これを行うには、私の知っている最も簡単な方法はdplyr::coalesceである:誰かがあなたのためにそれを行っている場合

dplyr::coalesce(c(1,0,0,NA), c(1, NA, 1, 1)) 
#> [1] 1 0 0 1 

なぜそれを行うための式を書いてわざわざ? ;)を使用して

+0

2番目の配列が1で0を返さずに0を返さなければならないので3番目の値では機能しません – manotheshark

+2

質問のパラメータを理解するのにしばらく時間がかかりましたが、 "var1の値を持つケースはvar2 IF var1 is NA、then var2 is not」、「IF var2 is NA、var1 is not」を意味することを意味する。言い換えれば、各対のうちの1つだけが「NA」である。それは予想される入力と出力なしには見えませんでした。これらのソリューションはどちらも動作しますが、 'pmax'ソリューションはより高速です。 – Benjamin

0

pmax

df <- expand.grid(c(1, 0, NA), c(1, 0, NA)) 
df$new_var <- pmax(df$Var1, df$Var2, na.rm = TRUE) 

> df 
    Var1 Var2 new_var 
1 1 1  1 
2 0 1  1 
3 NA 1  1 
4 1 0  1 
5 0 0  0 
6 NA 0  0 
7 1 NA  1 
8 0 NA  0 
9 NA NA  NA 
関連する問題