2016-05-03 15 views
0

私は、多くの数値変数を持つデータセットと、その観測値に対して低い値が抑制されているかどうかを示す文字変数を持っています。値が抑制されていない観測では、NAs 0(特定の変数のみ)を置き換えたいと思います。私はそれを理解できません。これは私のデータです:条件に応じてNAsを置き換えます。

suppressed var1 var2 
     none 2 6 
     none NA 6 
     none 3 7 
     none NA NA 
     full 2 6 
     full 3 6 
     none 3 NA 
     partial NA 6 
     none 2 7 
     none NA NA 

私は何をしたい=どれも抑制されなかった場合、ヴァール1で0にNAを変更です。私は

df$Var1<-if (df$suppressed=='none'&is.na(df$Var1)) 0 
     else df$Var1 

を試してみましたが、

Error in if (df$suppressed == "none" & is.na(df$Var1)) 0 else df$Var1 : 
    argument is of length zero 

私の場合はelse文に何か問題があるのか​​、これを行うための別の方法があるのですか?

は、ここに私のデータの構造です:

structure(list(suppressed = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 2L, 3L, 2L, 2L), .Label = c("full", "none", "partial"), class = "factor"), var1 = c(2, NA, 3, NA, 2, 3, 3, NA, 2, NA), var2 = c(6, 6, 7, NA, 6, 6, NA, 6, 7, NA)), .Names = c("suppressed", "var1", "var2"), row.names = c(NA, -10L), class = "data.frame") 
+3

ただ1つの条件しか持たないときは 'ifelse'の必要は全くありません(' df $ suppress == 'none')&is.na(df $ var1)、 "var1"] < - 0' –

答えて

1

ifelse()は、トリックを行うことができます。条件、if出力、else出力の3つの引数をとります。

df$Var1 <- ifelse(df$suppressed == 'none' & is.na(df$Var1), 0, Var1) 

コード{}には中括弧はありません。

if(df$suppressed == 'none' & is.na(df$Var1)){ 
    df$Var1 <- 0 
    }else{ 
    df$Var1 <- df$Var1 
} 

希望します。

+0

'満たすため。あなたが 'Var1'を* else *パートに置く必要があるのはなぜですか? –

+0

私は全く同意しますが、if文をどのように使用しようとしていたかを見て、ifelse()を表示したかったのです。しかし、私はあなたと議論することはできません。 –

+0

また、 'df $ var1 == NA'は、あなたが思っていることをやっていません。したがって、2番目のオプションは機能しません。 –