2017-02-16 29 views
-2

forループの使用に問題があります。私の問題は:2つの列が等しい場合(176または184または180または182または163または167の値を持つ)2つの列を置き換える= NULL2つの列を比較し、Rで置き換えます。

私はスクリプトを書いたが動作しません。

for (i in dane.dzikie$REN75M10 && dane.dzikie$REN75M10.1) if (i==176 | 184 | 180 | 182 | 
                  163 | 167) {i=NULL} 

それは私のデータの一部である: enter image description here

私は、最初の5番目と最後の列を置換したい両方の列が176または184または180または182またはが含まれているので、NAのために置き換えるべきです163または167値。条件は、両方の列で同じ値です。

+1

再現可能な例をお尋ねする方法とその提示方法をお読みください。 Rはベクトル化されていることに注意してください。 Forループは、ほとんどの場合、答えではありません。 – Heroka

+0

また、すでにブーリアンであるものに対してのみ、数字のために「|」を使用したり、それらの変数が何であれ「&&」を使用することはできません。代わりに、 '%i in%c(176、184、...)'を使用してください。そして、あなたは(簡単に) 'NULL'をdata.frameに入れることはできません。あなたはおそらく 'NA'を意味します。 – alistaire

答えて

0
# example dataframe something like this? 
dane.dzikie <- data.frame(REN75M10=c(176, 184, 5, 6, 7), 
          REN75M10.1=c(163,1,2,3,4), OTHER=c(163,2,3,4,5)) 

columns=c("REN75M10", "REN75M10.1") 
invalid.values <- c(176,184,180,182,163,167) 
dane.dzikie[,columns] <- 
    apply(dane.dzikie[,columns], 2, 
     function(x) ifelse(x %in% invalid.values, NA, x))       
+0

これは私の問題と似ていますが、次のようになります。それはNAのために置き換えなければならない。 176が同じ行の2つの列にある場合のみ。 –

関連する問題