假设我有一个这样的数据框:
X <- data_frame(
x = rep(seq(from = 1, to = 10, by = 1), 3),
y = 2*x + rnorm(length(x), sd = 0.5),
g = rep(LETTERS[1:3], each = length(x)/3))
如何拟合y~x
按变量分组的回归g
并将值fitted
和resid
泛型方法添加到数据框中?
我知道我可以做到:
A <- X[X$g == "A",]
mA <- with(A, lm(y ~ x))
A$fit <- fitted(mA)
A$res <- resid(mA)
B <- X[X$g == "B",]
mB <- with(B, lm(y ~ x))
B$fit <- fitted(mB)
B$res <- resid(mB)
C <- X[X$g == "C",]
mC <- with(B, lm(y ~ x))
C$fit <- fitted(mC)
C$res <- resid(mC)
然后rbind(A, B, C)
。但是,在现实生活中我没有使用lm
(我rqss
在quantreg
包中使用)。该方法偶尔会失败,所以我需要错误处理,我想将NA
所有失败的行放在其中。此外,有超过 3 个组,所以我不想继续为每个组复制和粘贴代码。
我尝试使用dplyr
withdo
但没有取得任何进展。我在想它可能是这样的:
make_qfits <- function(data) {
data %>%
group_by(g) %>%
do(failwith(NULL, rqss), formula = y ~ qss(x, lambda = 3))
}
用这种方法会很容易做到吗?在基础 R 中有另一种方法吗?