我有一个带有glimpse()
的数据框“DF”:
Observations: 1244160
Variables:
$ Test (fctr) 72001.txt, 72002.txt, 72003.txt, 72004.txt, 72005.txt,...
$ x (int) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ y (int) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2...
$ Value (dbl) -77.111111, -13.111111, 13.888889, 235.888889, 138.8888...
对于每个测试,我想使用子集数据建模“值”:
然后,我想使用这些模型预测“DF”中所有数据的“值”。
对于这些计算,我想使用dplyr
。但是,我找不到办法。这是我的最后一次尝试:
DF %>%
group_by(Test) %>%
do({
mod = lm(Value ~ x + y, data = (. %>% filter((x > 0) & (x < 6) & (y > 0) & (y < 6))))
print(mod)
Pred <- predict(mod, .)
data.frame(. , Pred)
})
glimpse()
但它失败了。你能救我吗?
可重复的示例
为了测试答案,我们可以使用虚拟可再现数据帧,例如mtcars:
mtcars %>%
group_by(cyl) %>%
do({
mod = lm(mpg ~ wt + qsec, data = . %>% filter(vs == 0))
print(mod)
Pred <- predict(mod)
data.frame(. , Pred)
})
glimpse()
答案 0 :(得分:0)
使用subset
函数的lm
参数。
results <- DF %>%
group_by(Test) %>%
do(mod = lm(Value ~ x + y, data = ., subset = foo))
要生成预测值,请尝试以下操作:
predict <- results %>%
do(data.frame(pred = predict(.$mod), Test = .[["Test"]]))
答案 1 :(得分:0)
在filter
之前保持group_by
:
mtcars %>%
filter(vs==0) %>%
group_by(cyl) %>%
do({
mod = lm(mpg ~ wt + qsec, data = .)
Pred <- predict(mod)
data.frame(Pred)
})
非dplyr
解决方案:
lapply(split(mtcars,mtcars$cyl), function(i){
mod <- lm(mpg ~ wt + qsec, i[i$vs == 0,])
Pred <- predict(mod)
data.frame(Pred)
})
答案 2 :(得分:0)
我认为我有一个答案,这与我的尝试很接近:
results <- mtcars %>%
group_by(cyl) %>%
do({
mod = lm(mpg ~ wt + qsec, data = filter(., vs == 0))
print(mod)
Pred <- predict(mod, .)
data.frame(. , Pred)
})
print(results, n=100)