如何根据行总和和列均值调整值?

时间:2019-02-14 12:55:53

标签: r rowsum

我想根据表中的行总和和列均值来调整/修改表中的值。 例如,我有一个像这样的表:

df <- data.frame(postal_code=c("51493", "51493", "51493", "51493", "88821", "88821", "88821"),
                 street_section = c("1", "2", "3", "4", "1", "2", "3"),
                 v1 = c(23.2, 21.8, 15.0, 33.2, 53.0, 19.8, 25.5), 
                 v2 = c(26.2, 10.2, 10.5, 22.2, 14.0, 25.2, 28.5),
                 v3 = c(33.3, 45.5, 55.2, 35.0, 23.5, 38.0, 42.5),
                 v4 = c(27.3, 20.8, 21.3, 20.2, 22.0, 15.6, 10.5))

df$row_sum <- rowSums(df[,3:6]) 

列V1,V2,V3,V4包含百分比,这些百分比应总计为100%。 在第二张表中,我具有每个邮政编码变量的平均百分比:

df_postal_code <- data.frame(postal_code=c("51493", "88821"),
                            V1 = c(24.4, 33),
                            V2 = c(16.8, 23.2),
                            V3 = c(41.8, 31.8),
                            V4 = c(20.0, 18.1))

我的问题是:是否有一种方法可以调整df中的V1,V2 ..中的值,使它们按邮政编码汇总时的平均值与df_postal_code中的平均值相同(按邮政编码计算平均值)并且同时它们按行总计达100%? 还有两个约束:

  • 百分比值必须介于0到100之间

  • 更改应尽可能小,例如如果我的行总和是110%,那么我不想将值减少10。最好减少几个变量。

我的桌子上有8000多个邮政编码,每个邮政编码包含大约200个街道区域,因此性能也是一个需要牢记的地方。

0 个答案:

没有答案