我不知道我在这里遗漏了什么:
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/mean(1)
尝试 summarise(df1, length(c(n,lag(n)))) -向量的长度 c(n,lag(n)) 与行数的两倍相同,具有平均值 1.230769 .
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