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

r, assign an NA value to each row in my b column corresponding to NA in my a column

我正在尝试为我的 b 列中对应于我的 a 列中的 NA 的每一行分配一个 NA 值。 这些列在数据框中 df.

但是当我执行以下代码时,我的所有 b 列都变为 NA。

我应该改变什么?

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

为此,我们可以通过创建一个逻辑 vector (is.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 的第 2 个和第 4 个元素已设置为 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

注意:我从

上的回答和评论中了解了此功能