【问题标题】:Is there an R function for finding the avg index of change (x[n]/x[1])^(1/(n-1))?是否有用于查找平均变化指数 (x[n]/x[1])^(1/(n-1)) 的 R 函数?
【发布时间】:2019-08-17 21:59:07
【问题描述】:

这是我在这个网站上的第一篇文章,如有任何错误,请见谅。

给定一个数据框

xyz <- data.frame(GEO=c("Belgium", "Belgium", "Belgium", "Germany", "Germany", "Germany", "Italy", "Italy", "Italy"),
                 year=c(2008, 2009, 2010, 2008, 2009, 2010, 2008, 2009, 2010),
                 median=c(10.3, 45.2, 34.2, 67.8, 68.7, 69.9, 53.2, 43.2, 33.3),
                 imigration=c(10.2, 45.2, 47.4, 33.3, 44.4, 55.5, 21.5, 76.5, 78.4))

我要做的就是计算中位数和移民的平均变化指数。

index=(x[n]/x[1])^(1/(n-1)) 

我尝试了很多解决方案,但找不到好的解决方案。 这是我的代码 - 也许你会用它来帮助我。

第一:

groupColumns = c("GEO","year")
dataColumns = c("median", "imigration")
index_median = ddply(mediana2, groupColumns, function(x) x[c((nrow(x)/x[1])^(1/nrow(x)-1)), ])
head(index_median)

第二:

xyz_index <- aggregate(xyz$median, xyz$imigration by=list(Category=xyz$"GEO/TIME"), FUN=median$index_median[nrow(median)]/median[1])^(1/(nrow(median)-1))

我想获得每个国家(比利时、德国、意大利)的中位数和移民(index_median、index_imigration)的平均变化指数。 类似的东西(数字是假的):

   GEO      index_median   index_imigration
1 Germany      2.3            1.3
2 Italy        1.6            1.6
3 Belgium      1.2            2.0

非常感谢!

【问题讨论】:

  • 您能否编辑您的问题并包含您的预期输出:即您的结果应该是什么样的?
  • 感谢您的建议,完成!
  • @wloczykijek 欢迎来到我认为你应该阅读this。同时,你想要library(dplyr);xyz %&gt;% group_by(GEO) %&gt;% mutate(Ind=((median/first(median))^(1/(row_number()-1))))
  • @A.Suliman 我编辑了我的帖子 - 你可以看到我到底想要得到什么
  • 现在更好,最后一个问题nindex=(x[n]/x[1])^(1/(n-1)) 中代表什么,我认为这是最后一个 obs,例如比利时的中位数是 34.2

标签: r grouping median


【解决方案1】:

我们可以 dplyr::group_by GEO 然后使用 dplyr::firstlast 对中值和移民进行第一次和最后一次观察每组。为了获得每组的观察次数,我们将使用dplyr::n()

library(dplyr)
xyz %>% group_by(GEO) %>% 
        #medain[n()] similar to last(median)
        summarise(Ind_median=((last(median)/first(median))^(1/(n()-1))), 
                  Ind_imigration=((last(imigration)/first(imigration))^(1/(n()-1))))

【讨论】:

    【解决方案2】:

    你也可以像这样使用base R:

    avgchange <- function(z, fld) { x <- z[,fld]; n<- length(x);(x[n]/x[1])^(1/(n-1))  }
    

    参数fld是你要总结的字段名

    使用基本 R 的 by

    z <- by(xyz, list(Category=xyz$GEO), fld="median",FUN=avgchange, simplify=FALSE)
    z
    

    这只是为了得到一个命名向量

    unlist(z)
    

    imigration 列也是如此

    z <- by(xyz, list(Category=xyz$GEO), fld="imigration",FUN=avgchange, simplify=FALSE)
    z
    unlist(z)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多