我非常有信心这是"运营商错误",但我们将不胜感激。 我有(示例)数据框
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