自己除的数字不等于1吗?

时间:2018-12-17 14:31:28

标签: r dplyr lag mutate

我不确定我在这里缺少什么:

library(dplyr)
df1<-data.frame(n=c(1,1,1,2,1,1,2))
mutate(df1,foo=n/mean(c(n,lag(n)),na.rm=TRUE))
  n    foo
1 1 0.8125
2 1 0.8125
3 1 0.8125
4 2 1.6250
5 1 0.8125
6 1 0.8125
7 2 1.6250

到底是怎么回事?第一行基本上应该是1/mean(1),即'1'。为什么我得到0.8125?甚至更奇怪的是在我的原始数据集中,对于基本相同的计算,我得到了另一个数字-0.608。我想念什么?

1 个答案:

答案 0 :(得分:3)

尝试summarise(df1, length(c(n,lag(n))))-向量c(n,lag(n))的长度等于行数的两倍,并且均值1.230769

我相信你想做的是:

mutate(df1,foo=n/rowMeans(cbind(n,lag(n)),na.rm=TRUE))

  n       foo
1 1 1.0000000
2 1 1.0000000
3 1 1.0000000
4 2 1.3333333
5 1 0.6666667
6 1 1.0000000
7 2 1.3333333