2017-06-02 33 views
-2

我試圖在我的列中對應於NA的b列中的每一行分配一個NA值。 這些列位於數據幀df中。r,在我的列中對應於NA的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

對於這一點,我們可以通過創建一個邏輯vectoris.na(df$a))使國稅髮量化選項使用,使用此子集「B」的元素,並將其分配給NA

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

如果我們使用data.table,這可以就地分配(:=

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

根據文檔?is.nais.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 

所以,向量df$b的第二和第四元件已經被設置爲NA

現在,如果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?