将所有零替换为NA:
df[df == 0] <- NA
Explanation
1.你不应该用NULL
来代替0.正如?'NULL'
年所说,
NULL表示R中的NULL对象
这是独一无二的,我猜,可以被视为最缺乏信息和空洞的对象1那么
data.frame(x = c(1, NULL, 2))
# x
# 1 1
# 2 2
也就是说,R不为这个空对象保留任何空间2同时,看看?'NA'
,我们看到了这一点
NA是长度为1的逻辑常数,其中包含缺失的值
重要的是,NA
的长度为1,因此R为其保留了一些空间.例如.,
data.frame(x = c(1, NA, 2))
# x
# 1 1
# 2 NA
# 3 2
此外,数据帧 struct 要求所有列具有相同数量的元素,以便不存在"孔"(即NULL
个值).
现在,您可以在一个数据帧中将零替换为NULL
,即完全删除包含至少一个零的所有行.当使用例如var
、cov
或cor
时,这实际上相当于首先用NA
替换零,并将use
的值设置为"complete.obs"
.然而,这通常并不令人满意,因为它会导致额外的信息丢失.
2.在解决方案中,我使用df == 0
矢量化,而不是运行某种循环.df == 0
返回(try )一个与df
大小相同的矩阵,其条目为TRUE
和FALSE
.此外,我们还可以将该矩阵传递给子集[...]
(参见?'['
).最后,虽然df[df == 0]
的结果非常直观,但df[df == 0] <- NA
给出了期望的效果似乎有些奇怪.赋值运算符<-
确实并不总是那么聪明,并且不以这种方式处理其他一些对象,但它处理数据帧;见?'<-'
.
1 The empty set in the set theory feels somehow related.
2 Another similarity with the set theory: the empty set is a subset of every set, but we do not reserve any space for it.