【发布时间】:2015-10-22 10:58:10
【问题描述】:
假设我有一个这样的数据框:
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))
如何拟合按变量 g 分组的回归 y~x 并将来自 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(我在quantreg 包中使用rqss)。该方法偶尔会失败,所以我需要错误处理,我想将所有失败的行放在NA 的位置。另外,有超过 3 个组,所以我不想为每个组继续复制和粘贴代码。
我尝试将dplyr 与do 一起使用,但没有取得任何进展。我在想它可能是这样的:
make_qfits <- function(data) {
data %>%
group_by(g) %>%
do(failwith(NULL, rqss), formula = y ~ qss(x, lambda = 3))
}
用这种方法会很容易做到吗?在基础 R 中还有其他方法吗?
【问题讨论】:
-
我想到了 broom 包中的
augment.columns函数。您在do中尝试过哪些不起作用的方法? -
@aosmith 我在想它可能类似于我刚刚添加的代码。
标签: r error-handling dplyr regression quantreg