【问题标题】:How to ignore null values in R?如何忽略 R 中的空值?
【发布时间】:2010-10-25 19:25:27
【问题描述】:

我有一个数据集,其中一个字段中有一些空值。当我尝试运行线性回归时,它会将字段中的整数视为类别指标,而不是数字。

例如,对于不包含空值的字段...

summary(lm(rank ~ num_ays, data=a)),

返回:

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 10.607597   0.019927 532.317  < 2e-16 ***
num_ays      0.021955   0.007771   2.825  0.00473 ** 

但是当我在具有空值的字段上运行相同的模型时,我得到:

Coefficients:
              Estimate Std. Error  t value Pr(>|t|)    

(Intercept)  1.225e+01  1.070e+00   11.446  < 2e-16 ***
num_azs0    -1.780e+00  1.071e+00   -1.663  0.09637 .  
num_azs1    -1.103e+00  1.071e+00   -1.030  0.30322    
num_azs10   -9.297e-01  1.080e+00   -0.861  0.38940    
num_azs100   1.750e+00  5.764e+00    0.304  0.76141    
num_azs101  -6.250e+00  4.145e+00   -1.508  0.13161    

处理此问题的最佳和/或最有效方法是什么,权衡取舍是什么?

【问题讨论】:

  • 说空话,你想到了NAnum_azs 是否有可能是 factor?看起来我没有清理过数据...
  • 我不认为这是一个因素。 num_ays 和 num_azs 都来自 MySQL 导出。两者的字段类型都是整数,但 num_azs 可以包含空值。
  • summary(a) 说您的数据列是什么?我猜一个非数值导致转换为因子。解决方案是使用 as.numeric (as.character(foo)) 转换为数字
  • 谢谢,Marek 等人——原来它被列为一个因素。我将在另一个问题中寻求答案。

标签: r null


【解决方案1】:

你可以像这样忽略空值:

a[!is.null(a$num_ays),]

【讨论】:

  • 谢谢,谢恩。我尝试使用:summary(lm(rank ~ num_ays, data=a[!is.null(a$num_ays)]))。不过,它给了我相同的输出。
  • is.null 如果对象是NULL,则返回TRUE,否则返回FALSE。因此,您的构造返回 a 或 0 行 data.frame 的所有行。我很确定你在考虑is.na ;)
【解决方案2】:

并且以 Shane 的回答为基础:您可以在 lm()data= 参数中使用它:

summary(lm(rank ~ num_ays, data=a[!is.null(a$num_ays),]))

【讨论】:

  • 谢谢,德克。我试过了,但它仍然将列中的数字视为类别标签......结果与以前相同。我是否还缺少其他东西?
  • 你被各种因素绊倒了。那是一个不同的问题。尝试搜索“[r] 因子”(即在标记为[r] 的帖子中的术语factor 用于R)。您需要以不同的方式读取数据,和/或对其进行转换。
  • 使用subsetlm 参数不是更好吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2017-10-03
  • 2011-10-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2022-10-25
相关资源
最近更新 更多