Я не уверен, что мне здесь не хватает:
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, по сути, для того же расчета. Что мне не хватает?
Попробуйте 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
Ах, понятно - значит, turnover=(n/((n+lag(n))/2))
тоже работает и дает ожидаемый результат. Здорово. Спасибо!
о ... значит,
mean
получает каждый раз весь векторn
, а не только значение текущей строки?