r,在我的列中对应于NA的b列中的每一行分配一个NA值

问题描述:

我试图在我的列中对应于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://*.com/questions/42107628/why-does-is-na-change-its-argument) – Axeman

对于这一点,我们可以通过创建一个逻辑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] 

根据文档?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?