我经常遇到这个问题,想知道是否有一个简单的解决方法。有些情况下,我发现在子集矩阵中进行思考更加合乎逻辑。
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
)。
是否有一种方便的方法可以允许按整数矩阵进行替换?
dat[sel.mat] <- NA
是被支持的。因此,从R-3.0.0开始将可用矩阵索引替换。(有关更多详细信息,请参见下面的答案。) - Josh O'Brien