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)
}
答
对于这一点,我们可以通过创建一个逻辑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<-
是一个通用函数,它将元素设置为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?
可能[为什么is.na()改变它的参数?](https://*.com/questions/42107628/why-does-is-na-change-its-argument) – Axeman