小编典典

将所有 0 值替换为 NA

all

我有一个带有一些数字列的数据框。某些行的值为 0,在统计分析中应视为空值。在R中将所有0值替换为NULL的最快方法是什么?


阅读 79

收藏
2022-07-28

共1个答案

小编典典

将所有零替换为 NA:

df[df == 0] <- NA

解释

1. 这不是NULL您应该想要替换零的东西。正如它所说?'NULL'

NULL 表示 R 中的空对象

这是独一无二的,我想,可以被视为最无信息和空洞的对象。1那么就不足为奇了

data.frame(x = c(1, NULL, 2))
#   x
# 1 1
# 2 2

也就是说,R 不为这个空对象保留任何空间。2同时,看着?'NA'我们看到

NA 是长度为 1 的逻辑常数,其中包含缺失值指示符。NA 可以强制转换为除 raw 之外的任何其他向量类型。

重要的NA是,长度为 1,以便 R 为其保留一些空间。例如,

data.frame(x = c(1, NA, 2))
#    x
# 1  1
# 2 NA
# 3  2

此外,数据框结构要求所有列具有相同数量的元素,这样就不会出现“漏洞”(即NULL值)。

现在,您可以在数据框中用零替换零,NULL即完全删除包含至少一个零的所有行。var例如,当使用
covcor时,这实际上等同于首先将零替换为NA并将其值设置use"complete.obs"。然而,这通常不能令人满意,因为它会导致额外的信息丢失。

2.df == 0在解决方案中,我使用矢量化,而不是运行某种循环。df == 0返回(尝试)一个与
相同大小的矩阵,其中包含和df的条目。此外,我们还可以将此矩阵传递给子集(参见参考资料)。最后,虽然结果非常直观,但给出预期效果可能看起来很奇怪。赋值运算符确实并不总是那么聪明,并且不能以这种方式与其他一些对象一起工作,但它可以与数据帧一起工作;见。TRUE``FALSE``[...]``?'['``df[df == 0]``df[df == 0] <- NA``<-``?'<-'

1集合论中的空集感觉有某种关联。
2与集合论的另一个相似之处:空集是每个集合的子集,但我们不为它保留任何空间。

2022-07-28