我一直遇到这个问题,想知道是否有一个简单的解决方法。在某些情况下,我发现考虑对矩阵进行子集化更合乎逻辑
N <- 12
N.NA <- 6
dat <- data.frame(V1=runif(N),V2=runif(N))
sel.mat <- matrix(c(sample(seq(N),N.NA),sample(ncol(dat),N.NA,replace=TRUE)),ncol=2)
这适用于选择,但不适用于替换:
> dat[sel.mat]
[1] 0.2582569 0.8455966 0.8828083 0.5384263 0.9574810 0.5623158
> dat[sel.mat] <- NA
Error in `[<-.data.frame`(`*tmp*`, sel.mat, value = NA) :
only logical matrix subscripts are allowed in replacement
我意识到错误消息是有原因的(如果您有多个替换指向同一个元素,它将不知道该怎么做),但这并不能阻止 R 允许对向量进行整数替换(例如dat$V1[c(2,3)] <- NA
)。
有没有一种方便的方法可以用整数矩阵替换?