【问题标题】:R: Extract complete cases/included observations from linear model or formula variablesR:从线性模型或公式变量中提取完整的案例/包含的观察结果
【发布时间】:2015-03-07 18:35:43
【问题描述】:

在运行m1 &lt;- lm(f1, data=DT) 之后,我想保存包含的观察结果(类似于“obs m2 <- lm(f2, data=DT[obs]).

或者,我想获得对于公式对象定义的给定变量集的完整观察。考虑一下这个类似 R 的伪代码:

f1 <- as.formula("y ~ x1 + x2 + x3")
f2 <- as.formula("y ~ x1 + x2")
obs <- complete.cases(DT[,list(all.vars(f1)])
m2 <- lm(f2, data=DT[obs])

我该怎么做?在第一种情况下,lm 已经隐式完成了工作;我怎样才能提取它?第二个,all.vars 返回一个字符向量;如何正确创建 DT (data.table) 可以理解的不带引号的列表?

【问题讨论】:

  • obs &lt;- complete.cases(DT[, c(all.vars(f1)), with = FALSE])
  • 这回答了我的问题。顺便说一句,obs &lt;- complete.cases(DT[, all.vars(f1), with = FALSE]) 也可以工作,因为all.vars 返回一个字符向量。我确实尝试了with 标志(list(f1),with=TRUE),但这不起作用。
  • 因为listdata.table 环境中执行非标准评估,这意味着它接收未加引号的变量名称。

标签: r data.table


【解决方案1】:

data.table v1.9.5na.omit 有一个cols 参数。

na.omit(DT, cols = all.vars(f))

【讨论】:

  • 是的,我认为这也回答了我的问题,尽管我没有对其进行测试。看起来也更干净。谢谢阿伦。
【解决方案2】:

假设您的 lm() 调用的 na.action 是默认的 na.omit,为什么不对原始数据调用 na.omit?

# create some missing values
mtcars$disp <- ifelse(runif(nrow(mtcars)) > 0.8, NA, mtcars$disp)

# fit model
m1 <- lm(mpg ~ disp, data = mtcars)

na.omit(mtcars[ , c("mpg", "disp")])

查看 na.omit 的帮助文件以了解替代方案。

【讨论】:

  • 感谢您的回复,但这并不能回答我的问题。 na.omit(data[subset]) 等同于 data[complete.cases(data[subset])] 并且可能更简洁,但问题在于从公式(或通过 all.vars(f) 的字符向量)创建子集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多