这是我的数据集。有两个类别变量,Deciles
(具有10个级别,从DC1
到DC10
)和Population
(具有3个级别:{{1 }},SAP
和TD6
)。
假设地,每个十分位(例如,SH
)应具有DC7
(Population
,SAP
和TD6
)的三个级别案子。
但是,有些十分位币缺少一个或两个SH
级别(请参阅Population
和DC1
)。重要的是要知道DC2
存在于所有十分位中,因此SAP
和TD6
是不存在的。
现在,我想比较SH
,SAPvsSH
和SAPvsTD6
,并编写了此函数,可以对其进行进一步编辑和更正:
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的百分比误差。
那么,我该如何介绍根据SH
和SHvsTD6
中的存在情况选择筛选的过滤器?
答案 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
}