我正在尝试为与A列中Na相对应的B列中的每一行分配一个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.na
, is.na<-
是 gen>通用函数,将元素设置为 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:我已经从答案和评论中了解了此功能,为什么is.na((更改其参数?