繁体   English   中英

R中数据表中的缺失值

[英]missing values in a data table in R

我有一个数据表A ,它有一列right_date 当我查看right_dateright_date ,它似乎有 486 个缺失值。 但是,当我删除A na.omit(A, cols="right_date")列中缺少值的right_date ,使用R 文档页面中的na.omit(A, cols="right_date") ,然后删除了 1,156 行。

我不知道为什么会这样。 似乎DataCombine::DropNA(DT, Var="")right_date_vect缺失值一致,它下降了 486 行。

如果您想尝试,这里是数据https://drive.google.com/file/d/1diq9ctwen6jqfRFlV24qG8PKqdFcBqhu/view?usp=sharing

在此处输入图片说明

问题中的对象“A”实际上不是 data.table。 na.omit()是一个通用方法,额外的参数可能会被点吃掉。 因此,虽然没有抛出错误,但na.omit.matrix()na.omit.data.frame()被调用,这将省略任何具有 NA 值的行。

这是 S3 系统的诅咒,它可以咬你。 当我收到意外的输出时,我做的第一件事就是,例如,在控制台执行na.omit (无括号)。 这将打印函数定义。 如果我看到类似UseMethod("na.omit") ,则表明行为因类而UseMethod("na.omit") ,因此我检查对象的类。

R 包省略号旨在解决这一缺陷。 下面是一种阻止这种情况再次发生的方法(非常基于那个自述文件!)

library(data.table)
library(ellipsis)
mat <- matrix(c(1, 2, 3, NA), nrow = 2)
colnames(mat) <- c("a", "b")
safe_na.omit <- function(object, ...) {
  check_dots_used()
  na.omit(object, ...)
}

safe_na.omit(mat, col = "a")
#> Error: 1 components of `...` were not used.
#> 
#> We detected these problematic arguments:
#> * `col`
#> 
#> Did you misspecify an argument?

dt <- as.data.table(mat)
safe_na.omit(dt, cols = "a")
#>    a  b
#> 1: 1  3
#> 2: 2 NA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM