2017-06-02 11 views
-2

私のa列のNAに対応するmy b列の各行にNA値を割り当てようとしています。 列はデータフレームdfにあります。r、私の列のNAに対応するmy b列の各行にNA値を割り当てます。

しかし、次のコードを実行すると、すべてのb列がNAになります。

私は変更する必要がありますか?このため

for(i in 1:nrow(df)) 
{ 
    row <- df[i,] 
    is.na(df$`a`) <- (df$b <- NA) 
} 
+2

の回答やコメントから、この機能について学びました[is.na()がその引数を変更するのはなぜですか?](https://stackoverflow.com/questions/42107628/why-does-is-na-change-its-argument) – Axeman

答えて

1

は、私たちは、 'B' の要素をサブセットするためにこれを使用してNA

df$b[is.na(df$a)] <- NA 

に割り当てる論理 vectoris.na(df$a))を作成することにより、ベクトル化オプションofthe利用することができます

data.tableを使用している場合は、この場所に(:=)を割り当てることができます。

library(data.table) 
setDT(df)[is.na(a), b := NA] 
0

?is.naによると、is.na<-NAに要素を設定する汎用関数です。 is.na(x) <- valueの右側については、valueは、xで使用するのに適したインデックスベクトルであるである必要があります。

例:

df <- data.frame(a = LETTERS[1:5], b = 1:5) 
is.na(df$b) <- c(2, 4) 
df 
# a b 
#1 A 1 
#2 B NA 
#3 C 3 
#4 D NA 
#5 E 5 

ので、NAに設定されているdf$bベクトルの2番目と4番目の要素。 df$aの対応する要素には同様NAに設定する必要がある場合は今

、我々が使用することができます。

is.na(df$a) <- is.na(df$b) 
df 
#  a b 
#1 A 1 
#2 <NA> NA 
#3 C 3 
#4 <NA> NA 
#5 E 5 

NB:私はWhy does is.na() change its argument?可能

関連する問題