代码之家  ›  专栏  ›  技术社区  ›  iod

一个数除以它本身不等于1?

  •  0
  • iod  · 技术社区  · 6 年前

    我不知道我在这里遗漏了什么:

    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 回复  |  直到 6 年前
        1
  •  3
  •   s_baldur    6 年前

    尝试 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
    
    推荐文章