R下降NA';逻辑列级别中的

R下降NA';逻辑列级别中的,r,logical-operators,na,R,Logical Operators,Na,我有一个数据框,其中包含一个损坏的行,带有NAs和“”。由于Excel无法处理(打开)该.csv文档的大小,因此我无法将其从导入R的.csv文件中删除 当我第一次读取.csv()时,我进行了一次检查,如下图所示,以删除带有NA的行: if ( any( is.na(unique(data$A)) ) ){ print("WARNING: data has a corrupt row in it!") data <- data[ !is.na(data$A) , ]

我有一个数据框,其中包含一个损坏的行,带有
NA
s和
”。由于Excel无法处理(打开)该.csv文档的大小,因此我无法将其从导入R的.csv文件中删除

当我第一次读取.csv()时,我进行了一次检查,如下图所示,以删除带有
NA
的行:

  if ( any( is.na(unique(data$A)) )   ){
  print("WARNING: data has a corrupt row in it!")  
  data <- data[ !is.na(data$A) , ]  
  }
当我尝试拟合线性模型时,这显然会引起问题。我怎样才能把NA作为一个逻辑层次去掉呢

我试过这个,但似乎不起作用:

A <- as.logical(droplevels(factor(data_combine$A)))
summary(A)
   Mode   FALSE    TRUE    NA's 
logical  185692   36978       0 
unique(A)
[1] FALSE  TRUE

A正如我在另一个答案中提到的,这些实际上不是因子水平。由于您询问如何删除
摘要
上的NA打印,我将取消删除此答案

NA
打印硬编码到逻辑向量的摘要中。以下是
摘要.default
中的相关代码

# value <- if (is.logical(object)) 
#     c(Mode = "logical", {
#         tb <- table(object, exclude = NULL)
#         if (!is.null(n <- dimnames(tb)[[1L]]) && any(iN <- is.na(n))) 
#             dimnames(tb)[[1L]][iN] <- "NA's"
#         tb
#     })
为了让您的摘要按您想要的方式打印,我们可以基于原始源代码编写一个
summary
方法

summary.logvec <- function(object, exclude = NA) {
    stopifnot(is.logical(object))
    value <- c(Mode = "logical", {
        tb <- table(object, exclude = exclude)
            if(is.null(exclude)) {
                if (!is.null(n <- dimnames(tb)[[1L]]) && any(iN <- is.na(n)))
                    dimnames(tb)[[1L]][iN] <- "NA's"
            }
            tb
        })
    class(value) <- c("summaryDefault", "table")
    print.summary.logvec <- function(x) {
        UseMethod("print.summaryDefault")
    } 
    value
}

现在我已经完成了所有这些,我想知道您是否尝试运行线性模型。

首先,您的
数据$A
不是一个因素,而是一个逻辑因素。对于因子和逻辑,
摘要
打印方法不同。逻辑使用
summary.default
,而因子调度到
summary.factor
。另外,它在结果中告诉您变量是逻辑变量

fac <- factor(c(NA, letters[1:4]))
log <- c(NA, logical(4), !logical(2))
summary(fac)
#   a    b    c    d NA's 
#   1    1    1    1    1 
summary(log)
#    Mode   FALSE    TRUE    NA's 
# logical       4       2       1 
也正在调用
summary.default
,因为您将
droplevels
包装为
as.logical
(为什么?)。因此,根本不要更改
数据\u组合$A
,只要尝试一下即可

summary(data_combine$A)

看看情况如何。欲了解更多信息,请提供您的数据样本。

Hmm,如果我运行
x,则
摘要(data$a)
显示
data$a
实际上是一个
逻辑
而非
因素。选中
summary(c(T,F))
summary(factor(c(T,F)))
@初学者-您可以使用
factor(NA,exclude=NULL)将NA添加为一个级别。
看起来NAs总是显示在逻辑向量摘要中。试试
摘要(c(逻辑(4),!逻辑(2))
@richardscriven,是的,我刚才注意到了。因此,这里可能没有与
级别
相关的问题(由
NA
介绍)。谢谢,我知道该专栏是符合逻辑的。我缺少的信息是
摘要(逻辑)
总是打印
NA
。因此,这是一个转移视线的问题。@Zhubarb-我之前还发布了另一个答案(目前已删除),说明了如何向摘要打印方法添加选项。如果您愿意,我可以取消删除它。如果不麻烦的话,将它附加到您现有的答案上会很有用。@Zhubarb-我取消删除了我的另一个答案,因为附加到这个答案上有点长
summary(log)  ## original vector
#    Mode   FALSE    TRUE    NA's 
# logical       4       2       3 
class(log) <- "logvec"
summary(log, exclude = NULL)  ## prints NA when exclude = NULL
#    Mode   FALSE    TRUE    NA's 
# logical       4       2       3 
summary(log)  ## NA's don't print 
#    Mode   FALSE    TRUE 
# logical       4       2 
fac <- factor(c(NA, letters[1:4]))
log <- c(NA, logical(4), !logical(2))
summary(fac)
#   a    b    c    d NA's 
#   1    1    1    1    1 
summary(log)
#    Mode   FALSE    TRUE    NA's 
# logical       4       2       1 
A <- as.logical(droplevels(factor(data_combine$A)))
summary(A)
summary(data_combine$A)