我有一个带有一些数字列的数据框。某些行的值为 0,在统计分析中应视为空值。在R中将所有0值替换为NULL的最快方法是什么?
将所有零替换为 NA:
df[df == 0] <- NA
解释
1. 这不是NULL您应该想要替换零的东西。正如它所说?'NULL',
NULL
?'NULL'
NULL 表示 R 中的空对象
这是独一无二的,我想,可以被视为最无信息和空洞的对象。1那么就不足为奇了
data.frame(x = c(1, NULL, 2)) # x # 1 1 # 2 2
也就是说,R 不为这个空对象保留任何空间。2同时,看着?'NA'我们看到
?'NA'
NA 是长度为 1 的逻辑常数,其中包含缺失值指示符。NA 可以强制转换为除 raw 之外的任何其他向量类型。
重要的NA是,长度为 1,以便 R 为其保留一些空间。例如,
NA
data.frame(x = c(1, NA, 2)) # x # 1 1 # 2 NA # 3 2
此外,数据框结构要求所有列具有相同数量的元素,这样就不会出现“漏洞”(即NULL值)。
现在,您可以在数据框中用零替换零,NULL即完全删除包含至少一个零的所有行。var例如,当使用 、cov或cor时,这实际上等同于首先将零替换为NA并将其值设置use为"complete.obs"。然而,这通常不能令人满意,因为它会导致额外的信息丢失。
var
cov
cor
use
"complete.obs"
2.df == 0在解决方案中,我使用矢量化,而不是运行某种循环。df == 0返回(尝试)一个与 相同大小的矩阵,其中包含和df的条目。此外,我们还可以将此矩阵传递给子集(参见参考资料)。最后,虽然结果非常直观,但给出预期效果可能看起来很奇怪。赋值运算符确实并不总是那么聪明,并且不能以这种方式与其他一些对象一起工作,但它可以与数据帧一起工作;见。TRUE``FALSE``[...]``?'['``df[df == 0]``df[df == 0] <- NA``<-``?'<-'
df == 0
df
TRUE``FALSE``[...]``?'['``df[df == 0]``df[df == 0] <- NA``<-``?'<-'
1集合论中的空集感觉有某种关联。 2与集合论的另一个相似之处:空集是每个集合的子集,但我们不为它保留任何空间。