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)