使用两个条件过滤数据集以创建函数

时间:2018-07-05 09:09:40

标签: r filter

这是我的数据集。有两个类别变量Deciles(具有10个级别,从DC1DC10)和Population(具有3个级别:{{1 }},SAPTD6)。

enter image description here

假设地,每个十分位(例如,SH)应具有DC7PopulationSAPTD6)的三个级别案子。

但是,有些十分位币缺少一个或两个SH级别(请参阅PopulationDC1)。重要的是要知道DC2存在于所有十分位中,因此SAPTD6是不存在的。

现在,我想比较SHSAPvsSHSAPvsTD6,并编写了此函数,可以对其进行进一步编辑和更正:

SHvsTD6

我需要什么?

  • 比较diff <- function(x) { SAP <- sum(x$mean[x$Population == "SAP"]) SH <- sum(x$mean[x$Population == "SH"]) TD6 <- sum(x$mean[x$Population == "TD6"]) SAPvsSH <- (SH*100/SAP)-100 SAPvsTD6 <- (TD6*100/SAP)-100 SHvsTD6 <- (TD6*100/SH)-100 show(SAPvsSH) show(SAPvsTD6) show(SHvsTD6) } 时,我想将所有SAPvsSH的SH值和mean的{​​{1}}值求和,它们仅出现在{{1 }}有数据。因此,在这种情况下,应为mean + SAP + SH + DC7
  • 比较DC8时,使用与DC9相同的方法。
  • 比较DC10时,仅应说明两个总体显示数据的位置。

最后三点在函数的开头。

稍后,在函数中,我们计算第二个方面相对于第一个总体的百分比误差。 SAPvsTD6计算SH相对于SAP的百分比误差。

那么,我该如何介绍根据SHSHvsTD6中的存在情况选择筛选的过滤器?

1 个答案:

答案 0 :(得分:2)

我将在百分比误差的计算中引入过滤器。

我们没有创建开头的总和,而是创建了子集mean矢量,我们用它们的Deciles命名。然后,在计算百分比误差时,我们使用它们的名称的intersect(对它们的Deciles进行分类)来对相关向量进行子集化:

FOO <- function(x){
  SAP <- x$mean[x$Population == "SAP"]
  names(SAP) <- x$Deciles[x$Population == "SAP"]
  SH <- x$mean[x$Population == "SH"]
  names(SH) <- x$Deciles[x$Population == "SH"]
  TD6 <- x$mean[x$Population == "TD6"]
  names(TD6) <- x$Deciles[x$Population == "TD6"]

  SAPvsSH <- sum(SH)*100 / sum(SAP[intersect(names(SAP), names(SH))]) - 100
  SAPvsTD6 <- sum(TD6)*100 / sum(SAP[intersect(names(SAP), names(TD6))]) - 100
  SHvsTD6 <- sum(TD6[intersect(names(SH), names(TD6))])*100 / sum(SH[intersect(names(SH), names(TD6))]) - 100
}