group_by mutate在dplyr中不起作用

时间:2016-11-30 23:33:04

标签: r group-by dplyr

我非常有信心这是"运营商错误",但我们将不胜感激。 我有(示例)数据框

foo <- data.frame("School"=c(1,1,1,1,2,2,2,2,3,3,3,3),
                 "Grade"=c(1,2,3,4,1,2,3,4,1,2,3,4),
                  "e2005" = c(180,221,193,192,218,209,211,236,222,283,195,225),
                  "e2006" = c(207,194,234,204,208,228,224,216,235,265,263,191))

我正在尝试使用dplyr中的mutate和lag来计算比率。我希望group_by&#34;学校&#34;,并且4是任何学校的最后一个年级,由此产生的新变量&#34; r2006&#34; (对于每所学校)应该是NA。但我做了一件事(也许很多)错了。经过几个小时的努力,我非常感谢所提供的任何帮助。

我正在运行的代码:

library(dplyr)
foo %>%
group_by(School)
mutate(foo,    r2006 = (foo[, 4] / lag(foo[, 3])))

期望的结果是:

School  Grade   2005    2006    r2006
1       1       180     207     NA
1       2       221     194     1.077777778
1       3       193     234     1.058823529
1       4       192     204     1.056994819
2       1       218     208     NA
2       2       209     228     1.04587156
2       3       211     224     1.071770335
2       4       236     216     1.023696682
3       1       222     235     NA
3       2       283     265     1.193693694
3       3       195     263     0.929328622
3       4       225     191     0.979487179

但我得到的是:

School  Grade   2005    2006    r2006
1       1       180     207     NA
1       2       221     194     1.077777778
1       3       193     234     1.058823529
1       4       192     204     1.056994819
2       1       218     208     1.083333333
2       2       209     228     1.04587156
2       3       211     224     1.071770335
2       4       236     216     1.023696682
3       1       222     235     0.995762712
3       2       283     265     1.193693694
3       3       195     263     0.929328622
3       4       225     191     0.979487179

我怀疑我要么没有正确处理延迟功能,要么我做错了其他事。

非常感谢任何帮助。谢谢。

帕特里克

> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 14393)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.5.0         RevoUtilsMath_8.0.3

0 个答案:

没有答案