我正在寻找一种将lm残差绑定到输入数据集的方法。该方法必须为丢失的残差添加NA,并且残差应该对应于正确的行。
示例数据:
N <- 100
Nrep <- 5
X <- runif(N, 0, 10)
Y <- 6 + 2*X + rnorm(N, 0, 1)
X[ sample(which(Y < 15), Nrep) ] <- NA
df <- data.frame(X,Y)
residuals(lm(Y ~ X,data=df,na.action=na.omit))残差应该绑定到df。
发布于 2012-12-03 03:44:19
"[<-"(df, !is.na(df$X), "res", residuals(lm(Y ~ X,data=df,na.action=na.omit)))就能达到目的。
发布于 2013-08-01 02:23:07
只需将na.action更改为na.exclude
residuals(lm(Y ~ X, data = df, na.action = na.exclude))na.omit和na.exclude在预测因子和标准方面都做了案例删除。它们唯一的不同之处在于,像residuals()或fitted()这样的提取器函数将在na.exclude中省略的情况下用NAs填充它们的输出,从而具有与输入变量相同长度的输出。
(这是here找到的最佳解决方案)
发布于 2012-12-03 03:19:36
使用merge或join。
N <- 100
Nrep <- 5
X <- runif(N, 0, 10)
Y <- 6 + 2*X + rnorm(N, 0, 1)
X[ sample(which(Y < 15), Nrep) ] <- NA
df <- data.frame(X,Y)
df$id <- rownames(df)
res <- residuals(lm(Y ~ X,data=df,na.action=na.omit))
tmp <- data.frame(res=res)
tmp$id <- names(res)
merge(df,tmp,by="id",sort=FALSE,all.x=TRUE)如果你需要维护秩序。使用plyr包中的join():
library(plyr)
join(df,tmp)https://stackoverflow.com/questions/13672690
复制相似问题