R语言is.na函数使用返回'Date of length 0'问题咨询
返回结果含义解释
你运行如下填充缺失值的代码后得到Date of length 0返回:
Bills$PaymentDate[is.na(Bills$PaymentDate)] <- Bills$FirstPaymentDate[is.na(Bills$PaymentDate)]-1
这个返回的实际含义非常直接:本次赋值操作没有匹配到任何需要修改的条目。
- 也就是说
Bills数据集的PaymentDate列里根本没有缺失值,你写的填充逻辑找不到可替换的位置,最终返回了长度为0的日期类型空向量,原数据集没有发生任何改动。 - 你可以单独运行
sum(is.na(Bills$PaymentDate))做验证,这个命令会统计列内的缺失值总数,当前场景下运行结果必然是0。
is.na()函数的作用说明 is.na()是R内置的基础缺失值判断函数,是所有缺失值处理场景最常用的工具,核心逻辑如下:
- 接受任意R对象作为输入(日常90%的使用场景是数据框的列、原子向量),返回和输入对象长度/维度完全一致的逻辑型结果:对应位置元素是R定义的正式缺失值(包括NA、NaN,覆盖数值、字符、日期、逻辑等所有内置数据类型)时返回
TRUE,非缺失值时返回FALSE。 - 它最常见的用法就是作为位置索引,和你写的代码逻辑一致:用逻辑判断结果筛选出符合条件(是缺失值/不是缺失值)的位置,做筛选、替换、删除等操作。
- 需要注意:它不会把空字符串
""、自定义的缺失标记(比如字符串"NA"、"缺失")判定为缺失值,只有R原生的缺失值标识才会触发TRUE返回。
这次返回空结果的本质原因:
is.na(Bills$PaymentDate)生成的逻辑向量里没有任何TRUE值,赋值语句左右两侧用这个逻辑向量筛出来的子集都是空的,没有可赋值的内容,自然就返回了空的日期向量。
内容的提问来源于stack exchange,提问作者CBB
相关产品推荐
相关产品推荐

